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

Пример "Multiple Inheritance"

Файлы:

Пример "Multiple Inheritance" показывает, как использовать форму, созданную с помощью Qt Designer, в приложении путем наследования от класса QWidget и от класса пользовательского интерфейса, которым является Ui::CalculatorForm.

Для создания подкласса файла calculatorform.ui и гарантирования обработки его в qmake с помощью uic, подключаем calculatorform.ui в файле .pro как показано ниже:

 SOURCES = calculatorform.cpp main.cpp
 HEADERS = calculatorform.h
 FORMS = calculatorform.ui

После компиляции проекта uic сгенерирует соответствующий ui_calculatorform.h.

Определение CalculatorForm

В определение CalculatorForm мы включаем ui_calculatorform.h, сгенерированный ранее.

 #include "ui_calculatorform.h"

Как рассматривалось выше, класс является подклассом и QWidget, и Ui::CalculatorForm.

 class CalculatorForm : public QWidget, private Ui::CalculatorForm
 {
     Q_OBJECT

 public:
     CalculatorForm(QWidget *parent = 0);

 private slots:
     void on_inputSpinBox1_valueChanged(int value);
     void on_inputSpinBox2_valueChanged(int value);
 };

Определены два слота для автоматического соединения в соответствии с соглашением об именовании ,uic. Это нужно для обеспечения того, чтобы средства QMetaObject'а по автосоединению соединяли все сигналы и слоты, связанные автоматически.

Реализация CalculatorForm

В конструкторе вызываем setupUi() для загрузки файла пользовательского интерфейса. Обратите внимание на то, что не нужен префикс ui так как CalculatorForm является подклассом класса пользовательского интерфейса.

 CalculatorForm::CalculatorForm(QWidget *parent)
     : QWidget(parent)
 {
     setupUi(this);
 }

Подключаем два слота, on_inputSpinBox1_valueChanged() и on_inputSpinBox2_valueChanged(). Эти слоты реагируют на сигнал valueChanged(), который отправляют оба счётчика. Всякий раз, когда изменилось значение одного из счетчиков, мы принимаем это значение и прибавляем его к значению другого счётчика, каким бы оно ни было.

 void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
 {
     outputWidget->setText(QString::number(value + inputSpinBox2->value()));
 }

 void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
 {
     outputWidget->setText(QString::number(value + inputSpinBox1->value()));
 }

Функция main()

Функция main() создаёт экземпляры классов QApplication и CalculatorForm. Объект calculator выводится на экран после вызова функции show().

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     CalculatorForm calculator;
     calculator.show();
     return app.exec();
 }

Для включения форм в приложения существует несколько подходов. Подход множественного наследования - только один из них. See Using a Component in Your Application for more information on the other approaches available.


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5