2016-01-20 52 views
2

我是Qt新手。我在Qt中做了一個項目。 現在我需要將QMainWindow更改爲QDialog。 如何在不刪除所有項目的情況下執行此操作? 如果將基本主窗口更改爲QDialog,是否有必要爲主窗口創建一個新窗口?如何將QMainWindow更改爲QDialog

回答

1

您可以自由使用任何類型的QWidget爲主。主窗口是您決定的任何內容,通常是您在main()函數中創建並顯示的窗口。所以你可以自由地改變你的基類到QDialog,它可能會工作。但是,如果您使用Qt Designer(直接或通過Qt Creator)創建包含所有小部件的文件,而不是手工編寫界面,並且您不想再次通過這種麻煩,它可能有點棘手。

一種方法是創建一個新的QDialog,然後將設計的窗口內容複製粘貼到新窗口。這是最簡單的方法,但是您可能會丟失在設計器中設置的某些屬性,因爲並非所有內容都被複制。

更棘手,也是更強大的方法是手動編輯創建的.ui文件。畢竟,它只是一個簡單的XML文件。查找class屬性並將class="QMainWindow"更改爲class="QDialog"。您還應該查看屬性並通過查看文檔來檢查這些屬性是否在QDialog中定義。如果它們是QMainWindow特定的,那麼只需仔細刪除它們。

當然,在使用XML之前,您應該備份您的項目(或將其提交給源代碼管理系統),因爲您可能會搞砸一些東西,以至於設計時會簡單地刪除部分文件,解析。

+0

當我看到您自己的答案時,我已經準備好了我的答案。那麼,我認爲這兩個都很有趣:)你的很好。謝謝;) – Tarod

+0

@塔羅德,我忘了菜單欄,狀態欄和其他這樣的事情。另一方面,你沒有提到不兼容的屬性(儘管我不確定這甚至是一個問題,也許Designer/UIC會忽略它們)。 –

+0

再次感謝您的留言。我贊成你,因爲我認爲你的回答非常好。保重! – Tarod

3

取決於您是否有.ui文件。

如果是這樣,你可以編輯的.ui和改線

<widget class="QMainWindow" name="MainWindow"> 

<widget class="QDialog" name="MainWindow"> 

此外,想一想如果像QMenuBarQToolBarQStatusBar類是必要的,您的項目。 Qt Designer默認將它們放在.ui文件中,因爲它們被QMainWindow使用。

之後,您應該更改MainWindow的基類。你應該有這樣的事情:

#include <QMainWindow> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 

所以你需要通過QDialog改變QMainWindow

#include <QDialog> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QDialog 
{ 

如果沒有.ui文件,第一個步驟是沒有必要的(顯然:))

當然,你需要檢查,如果你使用任何QMainWindow方法是不由QDialog執行,以避免編譯錯誤和功能缺失。