// Защита от повторного включения
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
// Пара include’ов
#include <QWidget>
#include <QMainWindow>
// Определение UI-класса наперёд, чтобы визуальное редактирование не приводило
// к крупным перекомпиляциям
namespace Ui {
class MainWindow;
}
// Собственно класс формы
class MainWindow : public QMainWindow
{
// Макрос, который добавляет файл в компиляцию MOC’ом,
// а также реализует пару функций
Q_OBJECT
public:
// Конструктор-деструктор.
// Форма семантически не эквивалентна parent’у,
// потому конструктор explicit
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
// Слоты — фишка Qt, которая обрабатывается MOC’ом
private slots:
private:
// Указатель на UI (для него в Qt есть ещё одна программа, UIC)
Ui::MainWindow *ui;
};
// Защита от повторного включения
#endif // MAINWINDOW_H
Что ещё написать?
Определение класса наперёд не мешает писать указатели и ссылки.
Конструктор explicit запрещает неявное преобразование. Explicit имеет смысл, если возможен вызов конструктора с одним параметром. Правило таково: ставь explicit, если твой объект по смыслу не эквивалентен единственному параметру конструктора. Например,
Ratio(int x);
, но
explicit Array(int x);
: при построении рационального числа из целого будет полный эквивалент, но при построении массива — нет.