2012-03-11 4 views
1

Я пытаюсь показать QDialog из QMainWindow с помощью Qt Creator. Имя QDialog - About. Мой 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); 

Что происходит? Есть ли структура с именем About в пространстве имен 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" 
Смежные вопросы