Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.21.229] |
|
Сообщ.
#1
,
|
|
|
В QtDesigner можно открыть Edit Signals and Slots и устанавливать соединения, но там есть только стандартные слоты. Допустим я хочу написать обработчик сигнала clicked() у pushButton. Обработчиком как я понимаю должен быть некий мой слот(не из набора стандартных), но как его добавить? Если я в коде класса, который генерируется из ui файла допишу, то Designer его не увидит. Где то в дизайнере добавить слот, я не вижу где. Подскажите как это правильно делается.
|
Сообщ.
#2
,
|
|
|
В 4й QT это может делаться либо private-наследованием от Ui:: т.е. в заголовочном файле формы типа
your_form.h надо написать что-то типа #include "ui_your_form.h" class YourWidget : public QWidget, private Ui::your_form { public YourWidget (QWidget *par=NULL, Qt:WFlags f =0); ... private slots: void your_slot (void); private: Q_OBJECT } в your_form.cpp соответственно YourWidget :: YourWidget (QWidget *par, Qt::WFlags f) : QWidget (par, f) { setupUi (this); ... connect (pushButton, SIGNAL (clicked()), this, SLOT (your_slot())); } void YourWidget :: your_slot (void) { } А вообще это тривиальный пример, так что читать документацию. С наилучшими пожеланиями, Юрий Русинов. Добавлено Ну или помещением в наследуемый класс формы из namespace Ui. |
Сообщ.
#3
,
|
|
|
То что Вы сказали оно все понятно и этот пример я видел в документации. Но в таком случае этот слот не доступен через дизайнер, но мне кажется, что все таки как то можно его добавить там. И плюс ко всему, если использовать заготовку (Eclise, Qt Eclipse Integration, QtGuiProject), то там в этой заготовке делается не наследование, а включение:
#include <QtGui/QWidget> #include "ui_test.h" class test : public QWidget { Q_OBJECT public: test(QWidget *parent = 0); ~test(); private: Ui::testClass ui; }; и здесь предложенным вами способом не получится. И я подозреваю, что именно в дизайнере можно добавить слоты, а не ручками в коде. Если так нельзя сделать, то зачем нужна такая стандартная заготовка? Куда тут добавить слот? |
Сообщ.
#4
,
|
|
|
В designer от QT 4 этого сделать нельзя, ибо другая политика построения форм. А в такой заготовке тоже можно добавить слот следующим образом
#include <QtGui/QWidget> #include "ui_test.h" class test : public QWidget { Q_OBJECT public: test(QWidget *parent = 0); ~test(); private slots: void testSlot (void); private: Ui::testClass ui; }; и сказав в конструкторе что-то типа test :: test (QWidget *parent) : QWidget (parent) { ui.setupUi (this); connect (ui.pushButton, SIGNAL (clicked()), this, SLOT (testSlot())); } |
Сообщ.
#5
,
|
|
|
Ладно спасибо, сейчас попробую. А в Qt3 можно было?
|
Сообщ.
#6
,
|
|
|
Да, в QT3 такое было возможно.
|