2012-03-11 67 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"