在Qt中實現多個QMainWindow同時顯示,可通過以下方法實現:
一、直接顯示多個實例
必須使用new
創建堆對象,避免棧對象因作用域結束被銷毀?。
int main(int argc, char *argv[]) {QApplication a(argc, argv);// 創建兩個獨立的主窗口QMainWindow *w1 = new QMainWindow();QMainWindow *w2 = new QMainWindow();w1->show(); // 顯示第一個窗口w2->show(); // 顯示第二個窗口return a.exec();
}
二、模態窗口實現(類似QDialog)
通過QEventLoop事件循環對象?,啟動事件循環,關閉事件循環。
// 繼承QMainWindow的子類
class SecondWindow : public QMainWindow {Q_OBJECT
public:void exec() {setWindowModality(Qt::ApplicationModal);show();m_eventLoop.exec(); }protected:void closeEvent(QCloseEvent *event) override {m_eventLoop.exit(); QMainWindow::closeEvent(event);}private:QEventLoop m_eventLoop;
};
三、窗口間交互控制
通過信號槽實現窗口切換。
// 主窗口類中實現跳轉邏輯
void MainWindow::on_openButton_clicked() {SecondWindow *sw = new SecondWindow(this); // 指定父對象自動釋放內存sw->show();
}// 子窗口關閉時觸發信號
void SecondWindow::closeEvent(QCloseEvent *event) {emit windowClosed(); // 發送關閉信號?QMainWindow::closeEvent(event);
}