我是Qt新手。我在Qt中做了一個項目。 現在我需要將QMainWindow
更改爲QDialog
。 如何在不刪除所有項目的情況下執行此操作? 如果將基本主窗口更改爲QDialog
,是否有必要爲主窗口創建一個新窗口?如何將QMainWindow更改爲QDialog
2
A
回答
1
您可以自由使用任何類型的QWidget
爲主。主窗口是您決定的任何內容,通常是您在main()
函數中創建並顯示的窗口。所以你可以自由地改變你的基類到QDialog
,它可能會工作。但是,如果您使用Qt Designer(直接或通過Qt Creator)創建包含所有小部件的文件,而不是手工編寫界面,並且您不想再次通過這種麻煩,它可能有點棘手。
一種方法是創建一個新的QDialog
,然後將設計的窗口內容複製粘貼到新窗口。這是最簡單的方法,但是您可能會丟失在設計器中設置的某些屬性,因爲並非所有內容都被複制。
更棘手,也是更強大的方法是手動編輯創建的.ui
文件。畢竟,它只是一個簡單的XML文件。查找class
屬性並將class="QMainWindow"
更改爲class="QDialog"
。您還應該查看屬性並通過查看文檔來檢查這些屬性是否在QDialog
中定義。如果它們是QMainWindow特定的,那麼只需仔細刪除它們。
當然,在使用XML之前,您應該備份您的項目(或將其提交給源代碼管理系統),因爲您可能會搞砸一些東西,以至於設計時會簡單地刪除部分文件,解析。
3
取決於您是否有.ui
文件。
如果是這樣,你可以編輯的.ui和改線
<widget class="QMainWindow" name="MainWindow">
要
<widget class="QDialog" name="MainWindow">
此外,想一想如果像QMenuBar
,QToolBar
和QStatusBar
類是必要的,您的項目。 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
執行,以避免編譯錯誤和功能缺失。
相關問題
- 1. 將我的Qdialog更改爲QMainWindow
- 2. 將QDialog連接到QMainWindow
- 3. 如何在QDialog中顯示QMainWindow
- 4. PY Qt從QMainWindow打開QDialog
- 5. 如何將信號從QDialog發送到QMainWindow類
- 6. QMainWindow,QWidget和QDialog有什麼區別?
- 7. 從QDialog到QMainWindow之間的連接 - PyQt5
- 8. 無法連接的QMainWindow和QDialog的
- 9. PyQt在QMainWindow中創建一個QDialog
- 10. 如何從Qdialog中更改QStackedWidget索引
- 11. Python Qt如何打開從QMainWindow彈出QDialog
- 12. 指向的QMainWindow更改
- 13. 如何將QMainWindow設置爲模態?
- 14. 如何使用Qt C++在QDialog窗口和QMainWindow之間進行通信
- 15. 如何將\\更改爲\
- 16. 檢測的QMainWindow/QDialog的的移動端(QT 4.8)
- 17. 用qdialog關閉qmainwindow時發生Python崩潰
- 18. QMainWindow正在處理應該被QDialog捕獲的事件
- 19. 打開QMainWindow後從靜態函數運行QDialog對象
- 20. 從qdialog存儲變量在qmainwindow中使用
- 21. 不能使用的QMainWindow後開了QDialog的(QT)
- 22. QDialog不會停留在父級之上QMainWindow
- 23. 初始化Ui指針從QMainWindow類到QDialog類
- 24. 如何根據QDialog使QScrollArea更改大小?
- 25. 如何更新QMainWindow中的QGraphicsScene
- 26. 如何顯示QDialog
- 27. 如何將X11事件傳遞給QDialog
- 28. 浮動子QMainWindow(QMainWindow作爲主QMainWindow的子部件)
- 29. 將多個QWidets合併爲一個QMainWindow
- 30. QT:將QDialog作爲對象傳遞
當我看到您自己的答案時,我已經準備好了我的答案。那麼,我認爲這兩個都很有趣:)你的很好。謝謝;) – Tarod
@塔羅德,我忘了菜單欄,狀態欄和其他這樣的事情。另一方面,你沒有提到不兼容的屬性(儘管我不確定這甚至是一個問題,也許Designer/UIC會忽略它們)。 –
再次感謝您的留言。我贊成你,因爲我認爲你的回答非常好。保重! – Tarod