Добрый день!!!
Я новичок во все этом-поэому прошу меня простить, если спрошу какую-нить глупость.

Пытаюсь сделать дерево(TreeModel) - элементы(TreeItem) которого можно перетаскивать в область, чтобы потом можно было отобразить данные связанные с этим элементом.
При этом есть возле каждого элемента должен быть checkbox - т.е перетащил и в checkbox появилась галочка.

Делаю вот такой код:

я выложу пока только .h - файлы, если понадобиться - то и конечно .cpp
TreeModel
#ifndef TREEMODEL_H
#define TREEMODEL_H

#include <QAbstractItemModel>
#include <QModelIndex>
#include <QVariant>
#include <QItemDelegate>

class TreeItem;

//! [0]
class TreeModel : public QAbstractItemModel
{
    Q_OBJECT

public:
    TreeModel(const QStringList &headers, const QString &data,
              QObject *parent = 0);
    ~TreeModel();
//! [0] //! [1]

    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation,
                        int role = Qt::DisplayRole) const;

    QModelIndex index(int row, int column,
                      const QModelIndex &parent = QModelIndex()) const;
    QModelIndex parent(const QModelIndex &index) const;

    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent = QModelIndex()) const;
//! [1]

//! [2]
    Qt::ItemFlags flags(const QModelIndex &index) const;
    bool setData(const QModelIndex &index, const QVariant &value,
                 int role = Qt::EditRole);
    bool setHeaderData(int section, Qt::Orientation orientation,
                       const QVariant &value, int role = Qt::EditRole);

    bool insertColumns(int position, int columns,
                       const QModelIndex &parent = QModelIndex());
    bool removeColumns(int position, int columns,
                       const QModelIndex &parent = QModelIndex());
    bool insertRows(int position, int rows,
                    const QModelIndex &parent = QModelIndex());
    bool removeRows(int position, int rows,
                    const QModelIndex &parent = QModelIndex());

    QMimeData *mimeData(const QModelIndexList &indexes) const;
    Qt::DropActions supportedDropActions() const;
    QStringList mimeTypes() const;

private:
    void setupModelData(const QStringList &lines, TreeItem *parent);
    TreeItem *getItem(const QModelIndex &index) const;

    TreeItem *rootItem;
};
//! [2]

#endif


TreeItem
#ifndef TREEITEM_H
#define TREEITEM_H

#include <QList>
#include <QVariant>
#include <QVector>
#include <QTreeWidgetItem>
#include <QCheckBox>

//! [0]
class TreeItem
{
public:
    TreeItem(const QVector<QVariant> &data, TreeItem *parent = 0);
    ~TreeItem();

    TreeItem *child(int number);
    int childCount() const;
    int columnCount() const;
    QVariant data(int column) const;
    bool insertChildren(int position, int count, int columns);
    bool insertColumns(int position, int columns);
    TreeItem *parent();
    bool removeChildren(int position, int count);
    bool removeColumns(int position, int columns);
    int childNumber() const;
    bool setData(int column, const QVariant &value);
    void setUserData(const QVariant &value);
    QVariant getUserData();

private:
    QList<TreeItem*> childItems;
    QVector<QVariant> itemData;
    TreeItem *parentItem;
    QVariant userdata;
};
//! [0]


ItemDelegate
#ifndef ITEMDELEGATE_H
#define ITEMDELEGATE_H

#include <QObject>
#include <QApplication>
#include <QItemDelegate>
#include <QRect>
#include <QEvent>
#include <QKeyEvent>
#include <QMouseEvent>

class ItemDelegate: public QItemDelegate
{
public:

    ItemDelegate(QObject* parent = 0);
    virtual void drawCheck(QPainter * painter,
                           const QStyleOptionViewItem & option,
                           const QRect & rect,
                           Qt::CheckState state ) const;

    virtual bool editorEvent ( QEvent * event,
                              QAbstractItemModel * model,
                              const QStyleOptionViewItem & option,
                              const QModelIndex & index );

    virtual void drawFocus ( QPainter * painter,
                             const QStyleOptionViewItem & option,
                             const QRect & rect ) const;
};
#endif // ITEMDELEGATE_H



ну соответственно... :
    QStringList headers;
    headers<<tr("Channel")<<tr("type");
    QTreeView *treeview = new QTreeView;
    treeview->setDragEnabled(true);
    treeview->setDropIndicatorShown(true);

    model = new TreeModel(headers,NULL);
    treeview->setModel(model);
    treeview->setItemDelegate(new ItemDelegate);
....


У меня получается так, что названия накладываются на чекбоксы, как этого избежать?