crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTreeWidgetItem
demaker
  опции профиля:
сообщение 31.1.2013, 14:16
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 29.1.2013
Пользователь №: 3691

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2913
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


точку с запятой после класса пропустил
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 31.1.2013, 14:26
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 29.1.2013
Пользователь №: 3691

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей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
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата(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
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 29.1.2013
Пользователь №: 3691

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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

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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.2.2013, 10:39
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2913
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


demaker,

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

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

Сообщение отредактировал Алексей1153 - 1.2.2013, 10:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 1.2.2013, 10:42
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


А для этого нужен (еще один) конструктор
explicit TreeWidgetItem(QTreeWidget*parent = 0);

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

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

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

Сообщение отредактировал lanz - 1.2.2013, 10:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 1.2.2013, 12:01
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 29.1.2013
Пользователь №: 3691

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да Съел :)

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

не заходит в дебаге в функцию
QMimeData * TreeWidget::mimeData (const QList<TreeWidgetItem *> items) const


:unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 1.2.2013, 12:40
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 29.1.2013
Пользователь №: 3691

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


А зачем преобразование типов? Почему не:
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.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.3.2021, 12:26