嵌入式Qt 对话框及其类型 QDialog
创始人
2024-12-18 19:36:27
0

一.对话框的概念

对话框是与用户进行简短交互的顶层窗口。

QDialog是Qt中所有对话框窗口的基类。

QDialog继承与QWidfet是一种容器类型的组件。

 QDialog的意义:

QDialog作为一种专业的交互窗口而存在。

QDialog不能作为子部部件嵌入其他容器中。

QDialog是定制了窗口式样的特殊的QWidget。

二.对话框的类型

模态对话框(QDialog::exec())

- 显示后无法与父窗口进行交互

- 是一种阻塞式的对话框调用方式

非模式对话框(QDialog::show)

- 显示后独立存在可以同时与父窗口进行交互

- 是一种非阻塞式的对话框调用方式。

三.对话框程序设计

main:

#include  #include  #include  #include  #include "Dialog.h"  int main(int argc, char *argv[]) {     QApplication a(argc, argv);     Dialog dlg;     int r = dlg.exec();      if( r == QDialog::Accepted )     {         qDebug() << "Accepted";     }     else if( r == QDialog::Rejected )     {         qDebug() << "Rejected";     }     else     {         qDebug() << r;     }          return r; } 

Dialog.c

#include "Dialog.h"  #include   Dialog::Dialog(QWidget *parent) :         QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this) {     ModalBtn.setText("Modal Dialog");     ModalBtn.move(20, 20);     ModalBtn.resize(100, 30);      NormalBtn.setText("Normal Dialog");     NormalBtn.move(20, 70);     NormalBtn.resize(100, 30);      MixedBtn.setText("Mixed Dialog");     MixedBtn.move(20, 120);     MixedBtn.resize(100, 30);      connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));     connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));     connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));      resize(140, 170); }  void Dialog::ModalBtn_Clicked() {     qDebug() << "ModalBtn_Clicked() Begin";      QDialog dialog(this);      dialog.exec();  //阻塞式调用      // done(Accepted);      qDebug() << "ModalBtn_Clicked() End"; }  void Dialog::NormalBtn_Clicked() {     qDebug() << "NormalBtn_Clicked() Begin";      QDialog* dialog = new QDialog(this);      dialog->setAttribute(Qt::WA_DeleteOnClose);     dialog->show();      // done(Rejected);      qDebug() << "NormalBtn_Clicked() End"; }  void Dialog::MixedBtn_Clicked() {     qDebug() << "MixedBtn_Clicked() Begin";      QDialog* dialog = new QDialog(this);      dialog->setAttribute(Qt::WA_DeleteOnClose);     dialog->setModal(true);     dialog->show();      // done(100);      qDebug() << "MixedBtn_Clicked() End"; }  Dialog::~Dialog() {     qDebug() << "~Dialog()"; } 

Dialog.h

#ifndef DIALOG_H #define DIALOG_H  #include  #include   class Dialog : public QDialog {     Q_OBJECT protected:     QPushButton ModalBtn;     QPushButton NormalBtn;     QPushButton MixedBtn; protected slots:     void ModalBtn_Clicked();     void NormalBtn_Clicked();     void MixedBtn_Clicked(); public:     Dialog(QWidget *parent = 0);     ~Dialog(); };  #endif // DIALOG_H 

Dialog::ModalBtn_Clicked()为阻塞式调用,程序会一直卡在ModalBtn_Clicked() Begin,只有将对话框关闭,程序还会继续向下运行,ModalBtn_Clicked() End才会打印。

Dialog::NormalBtn_Clicked()为非阻塞式调用,程序会一直运行,NormalBtn_Clicked() Begin,NormalBtn_Clicked() End,会连续打印,但还是不能和其他窗口进行交互。

小结:

相关内容

热门资讯

一分钟辅助!功夫川麻小程序可以... 一分钟辅助!功夫川麻小程序可以开挂吗,川麻换三张血战定牌神器竟然有挂辅助挂,扑克教程(有挂介绍)1、...
2分钟插件!掌中乐游戏辅助工具... 2分钟插件!掌中乐游戏辅助工具,悠闲麻将川南有挂吗(真是真的是有挂)1、玩家可以在掌中乐游戏辅助工具...
微扑克ai辅助工具!微扑克私人... 微扑克ai辅助工具!微扑克私人局后台操控,wpk本来真的是有挂,新2025教程(有挂软件)1)微扑克...
aapoker辅助工具!AAP... aapoker辅助工具!AAPoker一贯是真的有挂,aaPOKER一贯真的是有挂,科技教程(有挂秘...
wepoke辅助器!we po... wepoke辅助器!we poker的确是真的有挂,wepoke有正规黑科技;大神普及一款德州ai内...
微扑克德州专用辅助器!德州wp... 微扑克德州专用辅助器!德州wpk德州有挂,wpk真是有挂,玩家教你(有挂插件)1、每个玩家都可以进行...
7分钟辅助!乐清同城游麻将是不... 7分钟辅助!乐清同城游麻将是不是有挂,雀友会辅助器苹果版原来真的是有挂,细节方法(有挂软件)1、打开...
7分钟工具!拱趴十三水外 挂,... 7分钟工具!拱趴十三水外 挂,浙江闲乐有外 挂吗(原来是有挂)1、浙江闲乐有外 挂吗系统规律教程、浙...
aapoker有猫腻!aapo... aapoker有猫腻!aapoker脚本透明,AApoker好像是真的有挂,科技教程(有挂机密);1...
微扑克ai辅助!微扑克有后台控... 微扑克ai辅助!微扑克有后台控制,微扑克wpk辅助存在,德州教程(有挂辅助挂)1、下载好微扑克辅助软...