2012-03-11 68 views
1

我试图使用Qt Creator从QMainWindow中显示QDialog。 QDialog的名字是关于。我的MainWindow和我的QDialog默认都在命名空间Ui中,但是在尝试创建一个新的About时遇到错误。尝试访问命名空间中的类Ui

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中是否存在一个名为“关于”的结构?

回答

4

你并不真的需要使用堆,并且不使用UI::声明对话框中进行实例化(这是唯一一类为UI对话框的,而不是对话框本身)。使用这样的东西:

About dlg(this); 
dlg.exec(); 

假设你想要一个模式对话框,通常是一个关于盒子。否则使用QDialog::open()

2
namespace Ui { 
    class MainWindow; 
    class About; 
} 

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include "ui_about.h"