我正在学习Qt,Qt 5.当我启动Qt Creator并使用所有默认设置创建项目时,我生成了这两个文件,(我不包括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的方法有什么好处?请详细解答。
答案 0 :(得分:4)
#include "ui_mainwindow.h"
,而这反过来会拖累来自QtWidgets的很多内容,例如<QLabel>
,<QPushButton>
等。这会大大降低编译速度,因为每个人都包含{ {1}}现在还包括那些QtWidgets包含的内容。当使用Ui类作为成员并向前声明它时,所有这些包括只需要在编译mainwindow.h
时编译,而不是在从其他地方包含mainwindow.cpp
时编译。