mr-ZA
@mr-ZA

Объясните разбор файла mainwindow.h в QT по шагам?

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:


private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
  • Вопрос задан
  • 2389 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
// Защита от повторного включения
#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);: при построении рационального числа из целого будет полный эквивалент, но при построении массива — нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы