Qt中实现多个QMainWindow同时显示
在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);
}