Russian Qt Forum
Ноябрь 23, 2024, 07:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Наследование QTreeWidgetItem  (Прочитано 4762 раз)
fantom
Гость
« : Апрель 02, 2013, 19:34 »

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

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

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

Покажите что-ли кусок кода, который у Вас вызывает ошибку, а то не совсем понятно в каком контексте Вы пытаетесь применить механизм сигналов и слотов...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Апрель 02, 2013, 23:07 »

QObject должен идти первым в списке базовых классов
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Syveren
Гость
« Ответ #5 : Апрель 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 должен идти первым в списке базовых классов
Это просто рекомендация к оформлению или не только?
« Последнее редактирование: Апрель 04, 2013, 14:25 от Syveren » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Апрель 04, 2013, 14:50 »

Цитировать
QObject должен идти первым в списке базовых классов
Это просто рекомендация к оформлению или не только?
по-другому работать не будет
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 23.