我正在尝试使用Qt Creator从QMainWindow显示QDialog。 QDialog的名字是关于。默认情况下,我的MainWindow和我的QDialog都在名称空间Ui中,但是在尝试创建新的About时出现错误。
MainWindow.h
#include <QMainWindow>
#include "about.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private slots:
void on_actionAbout_activated();
private:
Ui::MainWindow *ui;
Ui::About *about;
};
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->about = null;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionAbout_activated()
{
this->about = new Ui::About(this);
this->about->show();
}
错误是:
invalid use of incomplete type ‘struct Ui::About’
这在线上发生:
this->about = new Ui::About(this);
发生了什么事?命名空间Ui中是否有名为About的结构?
答案 0 :(得分:4)
你真的不需要使用堆,并且你没有使用对话框的UI::
声明来实例化它(这只是一个用于 UI 的类。对话框,而不是对话框本身)。使用这样的东西:
About dlg(this);
dlg.exec();
假设您想要一个模态对话框,通常是关于框的内容。否则使用QDialog::open()
答案 1 :(得分:2)
namespace Ui {
class MainWindow;
class About;
}
和
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ui_about.h"