【发布时间】:2013-06-21 13:57:14
【问题描述】:
我正在学习 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。 (谁能在这里解释一下这个命名空间的用途?) - 我从
QMainWindow和Ui_MainWindow继承MainWindow类,而Qt Creator 的代码仅从QMainWindow类继承它。
我的问题是,使用我的方法是否有任何缺点,或者使用 Qt Creator 的方法是否有任何优点?请给出详细答案。
【问题讨论】:
-
你的项目真的编译了吗?
-
是的,两个版本都按预期工作。为什么?
-
@Rage 在 Qt 4 天里,元对象编译器 (MOC) 不喜欢 QObjects 或任何派生类的多重继承。
-
@RalphTandetzky 真的吗?为什么?
-
@Rage 可能是因为类中的内存布局。可能是因为从派生自
QObjects的两个类继承不起作用。它也不喜欢虚拟继承。我不知道为什么。但它没有用。
标签: c++ qt inheritance qmainwindow