2013-05-22 45 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

相關問題