Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ QTreeWidgetItem

Автор: demaker 31.1.2013, 14:16

Хочу сделать свой объект типа

class TreeWidgetItem: public QTreeWidgetItem
{

public:
Plot*p;

public:
explicit TreeWidgetItem(QWidget*parent = 0);
~TreeWidgetItem()
}


TreeWidgetItem::TreeWidgetItem(QWidget*parent): QTreeWidgetItem(parent){}
TreeWidgetItem::~TreeWidgetItem(){}


И когда хочу сделать что-то вроде

TreeWidgetItem* parent = new TreeWidgetItem(tree);
TreeWidgetItem* child =  new TreeWidgetItem(parent);

Компилятор ругается. <_<

Что не правильно и как избежать этого?

Автор: Алексей1153 31.1.2013, 14:17

точку с запятой после класса пропустил

Автор: demaker 31.1.2013, 14:26

Цитата(Алексей1153 @ 31.1.2013, 15:17) *
точку с запятой после класса пропустил


Да это моя опечтака сдесь :rolleyes:

ругается на-то типа нельзя
TreeWidgetItem::TreeWidgetItem(TreeWidgetItem*)

TreeWidgetItem* parent = new TreeWidgetItem(tree);
TreeWidgetItem* child = new TreeWidgetItem(parent);

Но вообщем TreeWidgetItem идет от QWidget

Автор: lanz 1.2.2013, 8:56

Цитата(demaker @ 31.1.2013, 15:26) *
Но вообщем TreeWidgetItem идет от QWidget

Нет. QTreeWidgetItem не наследует от QWidget.
Вот здесь(и далее) надо заменить на:
explicit TreeWidgetItem(QWidget*parent = 0);

на
explicit TreeWidgetItem(QTreeWidgetItem*parent = 0);

Автор: demaker 1.2.2013, 10:32

Хорошо, а с этим как быть

QTreeWidget* tree = new QTreeWidget();
TreeWidgetItem* parent = new TreeWidgetItem(tree);

тогда же опять ошибка будет


Автор: Алексей1153 1.2.2013, 10:39

demaker,

сделай два конструктора

TreeWidgetItem(QWidget* parent);
TreeWidgetItem(QTreeWidgetItem* parent);

Автор: lanz 1.2.2013, 10:42

А для этого нужен (еще один) конструктор

explicit TreeWidgetItem(QTreeWidget*parent = 0);

Кстати небольшая поправка
explicit TreeWidgetItem(QTreeWidgetItem*parent = 0);

Здесь нельзя писать =0, потому что нет конструктора QTreeWidgetItem который принимает 0 в качестве parent.

edit:
Опередили .)
Все таки вместо QWidget* лучше использовать QTreeWidget*.

Автор: demaker 1.2.2013, 12:01

Да Съел :)

тлоько теперь

не заходит в дебаге в функцию

QMimeData * TreeWidget::mimeData (const QList<TreeWidgetItem *> items) const


:unsure:

Автор: demaker 1.2.2013, 12:40

Да пришлось делать преобразование типов:

QMimeData * TreeWidget::mimeData (const QList<QTreeWidgetItem *> items) const
{
    QMimeData *mimeData = new QMimeData();
    QByteArray encodedData;

    foreach (QTreeWidgetItem* item, items)
    {
        if(((QTreeWidgetItem*)item)->checkState(0) != Qt::Checked)
        {
            emit sg_itemChecked((TreeWidgetItem*)item);
            encodedData.append(fileName_Item->indexOfChild((QTreeWidgetItem*)item));
        }
        else
        {
            encodedData.append(QVariant(-1).toByteArray());
        }
    }
    mimeData->setData( "application/x-qt-windows-mime;value=\"ComtradeChannel\"", encodedData);
    return mimeData;
}

Автор: lanz 1.2.2013, 13:13

А зачем преобразование типов? Почему не:

QMimeData * TreeWidget::mimeData (const QList<TreeWidgetItem *> items) const
{
    QMimeData *mimeData = new QMimeData();
    QByteArray encodedData;

    foreach (TreeWidgetItem* item, items)
    {
        if(item->checkState(0) != Qt::Checked)
        {
            emit sg_itemChecked(item);
            encodedData.append(fileName_Item->indexOfChild(item));
        }
        else
        {
            encodedData.append(QVariant(-1).toByteArray());
        }
    }
    mimeData->setData( "application/x-qt-windows-mime;value=\"ComtradeChannel\"", encodedData);
    return mimeData;
}

Поскольку TreeWidgetItem наследует от QTreeWidgetItem то указатель на него должен везде пролезть где нужен QTreeWidgetItem.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)