2013-05-22 47 views
0

我正在尝试构建一个可以在其中出现多个窗口的Qt应用程序。无法在我的项目中添加另一个窗口

例如:有一个主窗口,并且上面有一个设置菜单。点击设置菜单后,我希望另一个窗口会显示标题设置,并显示程序的不同设置属性。

我希望这个设置窗口是在Qt创建器中设计的,而不是仅通过编写代码来创建。我设计了设置窗口并将setings.ui文件添加到我的项目中。

我还创建了settingsWindow.cpp和settingsWindow.h,它们遵循mainWindow.h和mainWindow.cpp(当我创建gui项目时自动生成)的结构。

但是当我编译,它显示了settingsWindow构造的ui(new Ui::settingsWindow)错误settingsWindow.cpp

settingsWindow::settingsWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::settingsWindow) 
{ 
    ui->setupUi(this); 
} 

错误说:'Ui::settingsWindow' : no appropriate default constructor available

这里是settingsWinow.h的内容:

#ifndef SETTINGSWINDOW_H 
#define SETTINGSWINDOW_H 

#include <QMainWindow> 

namespace Ui 
{ 
    class settingsWindow; 
} 

class settingsWindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    explicit settingsWindow(QWidget *parent = 0); 
    ~settingsWindow(); 

private: 
    Ui::settingsWindow *ui; 
}; 

#endif // SETTINGSWINDOW_H 

我该怎么办?

+0

能告诉你'settingsWindow'的类声明的示例代码丢失? – JBL

+0

您是否尝试过重建项目? – thuga

+0

设置窗口的objectName是什么? – Amartel

回答

1

假设您正确创建了settingswindow类(通过右键单击项目资源管理器中的表单列表 - >添加新的 - > qt - > qt设计器表单类,您应该在其中实现settingswindow类),您需要包含在mainWindow.h中设置Windows.h,在mainWindow.h中创建settingsWindow类的指针(如果你希望它是全局的),在mainwindow.cpp中创建它,就像创建QWidget一样,但没有父类。

mainwindow.h:

#include "settingsWindow.h" 

... mainwindow class... 

settingsWindow *sw; 

..... 

mainwindow.cpp:

... somewhere in constructor: 
sw= new settingsWindow(); 
sw->show(); //(don't forget to delete sw in destructor, if you won't set any widget as it's parent) 
0

更可能有你的QMainWindow和UI设置之间的冲突。尝试改变,以一个QWidget和继承关闭两个用户界面和QWidget的:

#ifndef SETTINGSWINDOW_H 
#define SETTINGSWINDOW_H 

#include <QWidget> 
#include <QMainWindow> 


namespace Ui 
{ 
    class settingsWindow; 
} 

class settingsWindow : public QWidget, Ui::settingsWindow 
{ 
    Q_OBJECT 
public: 
    explicit settingsWindow(QWidget *parent = 0); 
    ~settingsWindow(); 
    QMainWindow* m_parent; 

private: 
    Ui::settingsWindow *ui; 
}; 

和:

settingsWindow::settingsWindow(QWidget *parent) : 
    m_parent(parent) 
{ 
    ui->setupUi(this); 
} 
+0

你正在混合具有相同名称的类不同的名字空间。就像OP一样。 – UmNyobe

2

你在你的窗口创建地方搞砸了。如果你只想使用QtCreator,你应该:

File -> New File or Project ->Qt -> Qt Designer Form Class 

然后,你将有你将能够编辑表单。该表格将生成类别ui::settingsWindow。另一方面,你将有一个不同的settingsWindow它们具有与上面显示的代码相同的代码。

ps:您不必担心类ui::settingsWindow。只要确保你有指令这是从您提供

#include "ui_settingsWindow.h" 
+1

#include“ui_settingsWindow.h”在settingWindow.cpp中,如果我可以添加 – Shf

+0

的确是首选。 – UmNyobe

相关问题