Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: fantom от Апрель 02, 2013, 19:34



Название: Наследование QTreeWidgetItem
Отправлено: fantom от Апрель 02, 2013, 19:34
Нужно немного модифицировать класс QTreeWidgetItem
Обычное наследование не подходит, компилятор выкидывает множество ошибок.
Пробовал как советовали тута:
http://www.forum.crossplatform.ru/lofiversion/index.php/t3598.html (http://www.forum.crossplatform.ru/lofiversion/index.php/t3598.html)
Но оно работает только без макроса Q_OBJECT, а мне нужны события.
Собственно можно ли нормально унаследовать QTreeWidgetItem ??


Название: Re: Наследование QTreeWidgetItem
Отправлено: Syveren от Апрель 02, 2013, 19:49
Чтобы работали сигналы и слоты необходимо отнаследоваться от QObject
Код
C++ (Qt)
class MyItem : public QTreeWidgetItem,public QObject
{
Q_OBJECT
}
 
Но нужно ли? Не зря ведь их не сделали наследниками QObject. Какие события вам нужны? Многие полезные сигналы есть у QTreeWidget. А новый сигнал с участием вашего айтема, легко создать с использованием имеющихся.
emit someSignalOccurred(MyItem* item, QVarian value) итд


Название: Re: Наследование QTreeWidgetItem
Отправлено: fantom от Апрель 02, 2013, 20:00
Да, есть. Их я и использую.
Код:
Object::connect: No such signal CTreeFileListWidget::itemEntered(CTreeWidgetItem*, int)
Но при использовании наследника от QTreeWidgetItem, возникает такая ошибка. (Это в наследнике от QTreeWidget)


Название: Re: Наследование QTreeWidgetItem
Отправлено: VPS от Апрель 02, 2013, 20:33
Покажите что-ли кусок кода, который у Вас вызывает ошибку, а то не совсем понятно в каком контексте Вы пытаетесь применить механизм сигналов и слотов...


Название: Re: Наследование QTreeWidgetItem
Отправлено: kambala от Апрель 02, 2013, 23:07
QObject должен идти первым в списке базовых классов


Название: Re: Наследование QTreeWidgetItem
Отправлено: Syveren от Апрель 04, 2013, 14:20
Object::connect: No such signal CTreeFileListWidget::itemEntered(CTreeWidgetItem*, int) Вы собираетесь отловить сигнал появления мыши над айтемом?
тогда его нужно делать самому через MouseMoveEvent или фильтр событий.
Код
C++ (Qt)
bool MainWindow::eventFilter(QObject *o, QEvent *e)
{
   switch(e->type())
   {
   case QEvent::MouseMove: break;
       QMouseEvent * me = static_cast<QMouseEvent *>(e);
       QTreeWidgetItem * item = ui->treeWidget->itemAt(me->pos());
       if(item!=0 && item!=lastOverMouseItem)
           emit mySignalItemEntered(item);
   default: break;
   }
   return false;
}
 
Цитировать
QObject должен идти первым в списке базовых классов
Это просто рекомендация к оформлению или не только?


Название: Re: Наследование QTreeWidgetItem
Отправлено: kambala от Апрель 04, 2013, 14:50
Цитировать
QObject должен идти первым в списке базовых классов
Это просто рекомендация к оформлению или не только?
по-другому работать не будет