Я использую qt Creator для создания графического интерфейса для приложения vtk.
Я сделал действие #define и хочу назначить эту команду QPushButton.
Как заставить кнопку воспроизводить мое определение при нажатии?
пример. интерфейс->кнопка->...
Я использую qt Creator для создания графического интерфейса для приложения vtk.
Я сделал действие #define и хочу назначить эту команду QPushButton.
Как заставить кнопку воспроизводить мое определение при нажатии?
пример. интерфейс->кнопка->...
Самый простой способ — определить слот ответа по умолчанию для вашей кнопки. В вашем определении класса (того же класса, который определяет кнопку) вы можете просто создать слот по умолчанию в разделе slots
.
class MyMainApplication : public QMainWindow
{
Q_OBJECT
public:
MyMainApplication(QWidget *parent = 0);
~MyMainApplication();
// More stuff in the public section (...)
public slots:
void on_pushButton_clicked(); // This is the important line
// The remaining definitions in your class
};
Теперь вы просто программируете функцию on_pushButton_clicked()
в своей реализации класса, и она будет реагировать на нажатие кнопки с именем pushButton
.
Синтаксис слотов по умолчанию: on_NAMEOFTHEWIDGET_NAMEOFTHESIGNAL
.
Со слотами по умолчанию соединение устанавливается автоматически. Если вы хотите использовать общее имя для слота, вы должны выполнить подключение вручную. Например, скажите, что вместо on_pushButton_clicked()
вы хотите использовать mySlot()
. В определении класса вы должны ввести
(...)
public slots:
void mySlot();
(...)
а в реализации класса, наверное в конструкторе, после команды ui->setupUi(this);
вы бы сделали связь кнопки и своего слота:
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(mySlot()));
Последнее замечание: в данном конкретном случае я почти уверен, что слоты тоже могут быть private
.
#define AlignXAxis()
. Что вам нужно сделать, так это поместить функцию void AlignXAxis()
в область slots:
вашего определения класса, реализовать функцию и затем установить соединение. Насколько я знаю, ваше утверждение #define
ни к чему не приведет. Вы должны соединить SIGNAL
(объявленный в блоке signals:
виджета) с SLOT
(объявленный в блоке slots:
принимающего виджета). Я не понимаю, зачем вам использовать #define
(который, опять же, насколько мне известно, не действует как слот).
- person rpsml; 21.08.2012
AlignCamera()
как класс slot
? Иначе, не видя какого-то кода, невозможно что-то другое подсказать.
- person rpsml; 21.08.2012
Вам нужно использовать функцию Qt, которая называется Сигналы и слоты. Многие объекты могут посылать сигналы при взаимодействии с ними. Примером является сигнал "clicked()", испускаемый QPushButton, или сигнал "triggered()", который испускается при нажатии на QAction.
Основная идея заключается в подключении сигнала к слоту. Слоты — это функции, которые вызываются при поступлении сигнала. Я могу предоставить вам пример PyQt:
QtCore.QObject.connect(self.ui.myButton, QtCore.SIGNAL("clicked()"), self.someFunction)
Код C++ не должен сильно отличаться. Проверьте примеры Qt, они содержат много полезного.