日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt5教程(七):模态/非模态对话框

發布時間:2024/1/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt5教程(七):模态/非模态对话框 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模態對話框就是在其沒有被關閉之前,用戶不能與同一個應用程序的其他窗口進行交互,直到該對話框關閉。

非模態對話框就是在被打開時,用戶既可選擇和該對話框進行交互,也可以選擇同應用程序的其他窗口交互。

1. 新建工程

本文福利, 免費領取Qt開發學習資料包、技術視頻,內容包括(C++語言基礎,Qt編程入門,QT圖像,QT網絡,QT數據庫編程,QT項目實戰,QT嵌入式開發,Quick模塊等等)↓↓↓↓↓↓見下面↓↓文章底部點擊免費領取↓↓

2. 添加菜單欄

創建"Dialog"菜單, 添加一個"模態對話框"項和"非模塊對話框項":

QMenuBar *menuBr = menuBar(); setMenuBar(menuBr); QMenu *pDialog = menuBr->addMenu("Dialog"); QAction *p1 = pDialog->addAction("模態對話框"); QAction *p2 = pDialog->addAction("非模態對話框");

?

3. 創建模態對話框

包含頭文件

#include <QDialog> #include <QDebug>

點擊菜單項創建模態對話框:

connect(p1, &QAction::triggered,[=](){QDialog dialog1;dialog1.exec();qDebug() << "11111";});

運行后點擊菜單下的"模態對話框對話框, 會彈出新的一個空白窗口, 但是"11111"沒有輸出:

在關閉模態對話框后, "11111"才輸出.

4. 創建非模態對話框

connect(p2, &QAction::triggered,[=](){QDialog dialog2;dialog2.show();qDebug() << "11111";}

保存運行后, 點擊菜單欄下的"非模態對話框", "11111"打印出來了, 但是對話框不見了. 這是因為, 當show();不會阻塞, 在匿名函數運行完后, dialog2就被回收了, 窗口自然就消失了.
為了解決這個問題, 我們只需要把QDialog dialog2;這句定義搬到匿名函數外面, 讓dialog2作為主窗口的成員函數, 這樣匿名函數運行完就不會回收掉dialog2了.
還有一種方法是, 使用new分配空間, 這樣會在主對話框關閉后才釋放:

connect(p2, &QAction::triggered,[=](){QDialog *dialog2 = new QDialog(this);dialog2->show();qDebug() << "11111";}

我們發現. 非模態對話框出現, "11111"也打印出來了


但是這樣使用new的方法, 在主對話框關閉后才釋放空間, 如果我們會多次使用該菜單項創建對話框, 會占用大量內存空間, 所以更好的方式是, 不給該會話框指定父對象, 并設置在該對話框關閉后自動釋放空間:?

connect(p2, &QAction::triggered,[=](){QDialog *dialog2 = new QDialog;dialog2->setAttribute(Qt::WA_DeleteOnClose);dialog2->show();qDebug() << "11111";});

附錄

mainwindow.cpp

#include "mainwindow.h" #include <QMenuBar> #include <QMenu> #include <QAction> #include <QDialog> #include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {QMenuBar *menuBr = menuBar();setMenuBar(menuBr);QMenu *pDialog = menuBr->addMenu("Dialog");QAction *p1 = pDialog->addAction("模態對話框");QAction *p2 = pDialog->addAction("非模態對話框");connect(p1, &QAction::triggered,[=](){QDialog dialog1;dialog1.exec();qDebug() << "11111";});connect(p2, &QAction::triggered,[=](){QDialog *dialog2 = new QDialog;dialog2->setAttribute(Qt::WA_DeleteOnClose);dialog2->show();qDebug() << "11111";});}MainWindow::~MainWindow() {}

本文福利, 免費領取Qt開發學習資料包、技術視頻,內容包括(C++語言基礎,Qt編程入門,QT圖像,QT網絡,QT數據庫編程,QT項目實戰,QT嵌入式開發,Quick模塊等等)↓↓↓↓↓↓見下面↓↓文章底部點擊免費領取↓↓?

總結

以上是生活随笔為你收集整理的Qt5教程(七):模态/非模态对话框的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。