[Предыдущий: Урок 3] [Учебное пособие] [Следующий: Урок 5] Урок 4 - Используйте виджеты
Файлы: В следующем примере продемонстрируем создание собственного виджета, а также рассмотрим, как управлять минимальным и максимальным размером виджета. #include <QApplication> #include <QFont> #include <QPushButton> #include <QWidget> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setFixedSize(200, 120); QPushButton *quit = new QPushButton(tr("Quit"), this); quit->setGeometry(62, 40, 75, 30); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } Разберем программу строка за строкойclass MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; В этих строчках мы создаем новый класс. Так как новый класс унаследован от класса QWidget, то он является виджетом и может быть окном верхнего уровня или дочерним виджетом (например, как в случае с QPushButton в предыдущем уроке). Класс имеет только один метод - конструктор (в дополнение к членам, унаследованным из QWidget). Конструктор является стандартным конструктором виджета Qt; при создании собственного виджета вы всегда должны включать подобный конструктор. Аргументом является родительский виджет. Для создания окна верхнего уровня вы должны указать нулевой указатель в качестве родителя. Как вы видите, по умолчанию виджет является окном верхнего уровня. MyWidget::MyWidget(QWidget *parent) Реализация конструктора начинается с этой строчки. Как и большинство виджетов, он всего лишь вызывает конструктор родительского класса - QWidget'а. : QWidget(parent) { setFixedSize(200, 120); Так как наш виджет не знает, как обрабатывать изменение размера окна, мы фиксируем его размер. В следующем уроке мы рассмотрим, как виджет может реагировать на изменение размера пользователем. QPushButton *quit = new QPushButton(tr("Quit"), this); quit->setGeometry(62, 40, 75, 30); quit->setFont(QFont("Times", 18, QFont::Bold)); Здесь мы создаем и настраиваем дочерний виджет (родителем создаваемого виджета будет this, т.е. объект MyWidget). Вызов функции tr() позволяет перевести текст на кнопке "Quit" на другой язык непосредственно во время выполнения программы на основании содержимого файла перевода. Возьмите в привычку использовать функцию tr() для всех строк, предназначенных для показа пользователям, это вам пригодится, если вы решите перевести интерфейс программы на другой язык. Обратите внимание на то, что quit является локальной переменной в нашем конструкторе. MyWidget не следит за ней; Qt заботится о ней и удалит её автоматически, когда придёт время уничтожать MyWidget. Поэтому MyWidget не нуждается в деструкторе. (С другой стороны, вы можете удалить quit вручную, когда вам это понадобится. При этом quit передаст соответствующее сообщение Qt.) Функция QWidget::setGeometry() устанавливает позицию виджета на экране и его размер. Это эквивалентно вызову QWidget::move(), а затем QWidget::resize(). connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); } Указатель qApp является глобальной переменной, объявленной в заголовочном файле <QApplication>. Он указывает на единственный в программе экземпляр QApplication. int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } В этих строчках мы создаем новый дочерний виджет, делаем его видимым и выполняем приложение. Запуск приложенияПоведение программы аналогично программе, созданной нами на предыдущем уроке. Главное отличие состоит в том, как мы ее сделали. Программа ведет себя немного по-другому. Просто попробуйте изменить размер окна, чтобы это увидеть. Домашнее заданиеПопробуйте создать еще один объект MyWidget в main(). Что произойдет? Попробуйте добавить еще несколько кнопок или вставить какие-нибудь виджеты, кроме QPushButton. [Предыдущий: Урок 3] [Учебное пособие] [Следующий: Урок 5]
|
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |