для выделения функций сигналов и слотов. Как и в комплекте GTK+, вы можете связать ряд слотов с заданным сигналом и также связать слот с любым количеством сигналов с помощью множественных вызовов функции connect. Если она завершается аварийно, то возвращает
FALSE
.
Остается реализовать ваш слот в виде обычной функции-метода:
void MyWindow::doSomething {
// Код слота
}
Выполните упражнение 17.2.
Упражнение 17.2. Сигналы и слоты
Теперь, зная основы использования сигналов и слотов, применим их в примере. Усовершенствуйте
QMainWindow
, вставьте в него кнопку и свяжите сигнал кнопки
clicked
со слотом.
1. Введите следующее объявление класса и назовите файл ButtonWindow.h:
4. Qt автоматически удаляет виджеты, поэтому ваш деструктор пуст:
ButtonWindow::~ButtonWindow {}
5. Затем реализация слота:
void ButtonWindow::Clicked(void) {
std::cout << "clicked!\n";
}
6. И наконец, в функции
main
вы просто создаете экземпляр типа
ButtonWindow
, делаете его главным окном вашего приложения и отображаете окно на экране:
int main(int argc, char **argv) {
QApplication app(argc, argv);
ButtonWindow *window = new ButtonWindow;
app.setMainWidget(window);
window->show;
return app.exec;
}
7. Прежде чем вы сможете откомпилировать данный пример, необходимо запустить препроцессор для заголовочного файла. Программа этого препроцессора называется Meta Object Compiler (moc, компилятор метаобъекта) и должна быть включена в пакет комплекта Qt. Выполните
moc
для файла ButtonWindow.h, сохранив результат в файле ButtonWindow.moc:
$ moc ButtonWindow.h -о ButtonWindow.moc
Теперь можно компилировать как обычно, скомпоновав с результатом команды