Qt:Документация 4.3.2/tutorial-t4

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
40px Внимание: Актуальная версия перевода документации находится здесь

__NOTOC__

Image:qt-logo.png

Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Image:trolltech-logo.png

[Предыдущая: Часть 3 ] [ Учебное пособие ] [Следующая: Часть 5 ]

Содержание

[править] Урок 4 - Используйте виджеты

Файлы:

Файл:T4.png

Следующий пример продемонстирует нам создание собственного виджета, также рассмотрим, как управлять минимальным и максимальным размером виджета.

 #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)

Выполнение конструктора начинается с этой строчки. Как и большинство виджетов, он всего лишь вызывает конструктор родителя 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() позволяет перевести текст на кнопке на другой язык непосредственно во время выполнения программы. Это будет осуществлено на основании специального файла перевода. Возьмите себе в привычку использовать функцию 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 ]



Copyright © 2007 Trolltech Trademarks
Qt 4.3.2