3
我正在學習Qt,Qt 5.當我啓動Qt Creator並創建一個包含所有默認設置的項目時,我生成了這兩個文件(我不包括main.cpp和在.pro文件)從QMainWindow和Ui_MainWindow繼承MainWindow類
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
在我的代碼。 (任何人都可以在這裏解釋我使用這個命名空間嗎?) - 我繼承了
QMainWindow
和Ui_MainWindow
的MainWindow
類,而Qt Creator的代碼僅從QMainWindow
類繼承它。
我的問題是,使用我的方法是否有缺點,或者是否有使用Qt Creator的方法的優勢?請給出詳細的答案。
您的項目是否實際編譯? –
是的,兩個版本都按預期工作。爲什麼? –
@Rage在Qt 4天中,元對象編譯器(MOC)不喜歡使用QObject或任何派生類進行多重繼承。 –