Я изучаю Qt, Qt 5. Когда я запускаю Qt Creator и создаю проект со ВСЕМИ настройками по умолчанию, я получаю эти 2 сгенерированных файла (я исключаю main.cpp и файл .pro)
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
Теперь я предпочитаю делать это так,
my_mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "ui_mainwindow.h"
class MainWindow : public QMainWindow, private Ui_MainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
};
#endif // MAINWINDOW_H
my_mainwindow.cpp
#include "my_mainwindow.h"#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
setupUi(this);
}
MainWindow::~MainWindow()
{
}
Вот основные различия между моим кодом и кодом Qt Creator:
namespace Ui
в моем коде. (Может ли кто-нибудь объяснить мне, как использовать это пространство имен здесь?)MainWindow
класс из обоих QMainWindow
а также Ui_MainWindow
тогда как код Qt Creator наследует его только от QMainWindow
учебный класс.Мой вопрос заключается в том, есть ли ЛЮБОЙ недостаток в использовании моего подхода или есть какое-то преимущество в использовании подхода Qt Creator? Пожалуйста, дайте подробный ответ.
#include "ui_mainwindow.h"
и это, в свою очередь, тянет во много включений из QtWidgets, как <QLabel>
, <QPushButton>
и т.д. Это значительно снижает скорость компиляции, так как каждый, кто включает mainwindow.h
теперь также включает эти QtWidgets включает. При использовании класса Ui в качестве члена и объявлении его вперед все эти включения должны компилироваться только при компиляции mainwindow.cpp
, но не при включении mainwindow.h
откуда-то ещеДругих решений пока нет …