Название: Как переписать события для виджетов из .ui ? Отправлено: ged от Май 12, 2008, 18:05 В designer'е создал форму, на которой, среди прочего, располагается QGraphicsView под именем graphicsView.
Пробовал в коде переписать события мыши т.о. : Код: void QGraphicsView::mousePressEvent(QMouseEvent* pe) Не работает, точнее работает для самой формы, а не для QGraphicsView :\ Если писать вручную, например, как ниже, то все ок. Подскажите плиз, что почитать, чтобы разобраться с этим. Код: #include <QApplication> P.S. Qt 4.3.3, если это важно. Название: Re: Как переписать события для виджетов из .ui ? Отправлено: lit-uriy от Май 12, 2008, 22:27 вообще я думаю, это плохая затея Qt'явый класс трогать, надо от него наследника сделать, и его уже менять как тебе вздумается. А вдизайнере можно указывать от какого класса твой виджет. Ищи слово "promote"
Название: Re: Как переписать события для виджетов из .ui ? Отправлено: ged от Май 13, 2008, 09:43 Короче наверное проще раскидать виджеты вручную в коде, но я думал, что можно "как-нить так" ). А если я переделаю QGraphicsView во что-то свое и потом добавлю его в виджеты designer'а нельзя будет для него переписать события? "Promote" не нашел ни в свойствах designer'а, ни в assistant. Где его искать?
P.S. Все, нашел Promote to... Похоже это то, что надо, спасибо :) P.P.S. Вроде как сделал, но опять то же самое. В Promote to... указал Base class name: QGraphicsView, Promoted class name: MainView, Header file: mainview.h, Global include: on, нажал Add. Опять правой по виджету, Promote to -> MainView. Создал файлы mainview.h и mainview.cpp следующего содержания: mainview.h: Код: #ifndef MAINVIEW_H mainview.cpp: Код: #include <mainview.h> Опять все работает для формы, но не для graphicsView. В ui_airport.h graphicsView создается вот так: graphicsView = new MainView(centralwidget); Централ виджет: centralwidget = new QWidget(MainWindow); МэйнВиндоу это класс формы airport.ui. Чую что-то я сделал совсем не так как надо, прошу помочь, потому что всем этим занимаюсь впервые, а разобраться надо. Название: Re: Как переписать события для виджетов из .ui ? Отправлено: lit-uriy от Май 13, 2008, 20:14 курсор-рука должен появлятся на QGraphicsView и только на нем, когда кнопку мыша щелкаешь, так?
Название: Re: Как переписать события для виджетов из .ui ? Отправлено: lit-uriy от Май 13, 2008, 20:58 тестовый проект во вложении
Название: Re: Как переписать события для виджетов из .ui ? Отправлено: ged от Май 13, 2008, 21:31 Спасибо. Твоя версия работает именно так, как надо, будем ковырять и курить маны :)
Добавлено 14.05.2008: Вот что выяснилось, твоя программа работает и если я сам сделаю такую же на основе QWidget тоже работает. Но беда в том, что у меня QMainWindow и там, опять все проваливается в черную дыру. Есть подозрение, что это из-за centralWidget. Есть какие-нибудь предположения? Кстати, у меня перед этим не собиралось, потому что я выделил в проекте подпроект с библиотекой и у меня в итоге сама программа начала собираться в src и тихо там существовать никого не трогая, а загружалась старая версия из bin за 6 мая и естесственно ничего не менялось :) Название: Re: Как переписать события для виджетов из .ui ? Отправлено: lit-uriy от Май 14, 2008, 10:38 а что тебе мешает сделать окно на основе QWidget'а, а потом его воткнуть в QMainWindow как центральный виджет.
Т.е. если говорить о моем примере, то в качестве центрального виджета выбирай класс Dialog. к слову сказать крыжик "Global include:" я не устанавливал. Название: Re: Как переписать события для виджетов из .ui ? Отправлено: ged от Май 14, 2008, 17:39 Мешает только неумение это делать. Попробовал прилепить форму QWidget к форме QMainWindow с помощью setCentralWidget теперь у меня на любое событие реакция Segmantation fault, события мыши не отслеживаются. А нет больше мыслей как достучаться до тех виджетов которые попадают в centralWidget?
Название: Re: Как переписать события для виджетов из .ui ? Отправлено: ged от Май 15, 2008, 17:48 Короче как это сделать с помощью дизайнера так не понял, вручную написал, работает. Если разберусь - опишу.
|