Qt -- 19模态和非模态对话框

这篇具有很好参考价值的文章主要介绍了Qt -- 19模态和非模态对话框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是模态和非模态对话框

Qt -- 19模态和非模态对话框
Qt -- 19模态和非模态对话框
点不了其他的功能和界面。这种对话框就称为模态对话框。还有一些能够操作其他的窗口属于非模态对话框。

下面新建一个工程,新建好之后,在设计界面中搭建如下图所示窗体(1、在菜单项中添加文件、编辑的菜单,
2、添加一个工具栏,3、在文件菜单中添加菜单项新建,并把新建放到工具栏中。)
Qt -- 19模态和非模态对话框
现在,点击新建按钮,没有任何的反应,因此,我们要给它添加功能,当点击新建按钮后,跳出一个对话框。这就需要用到信号与槽的机制。

实现模态对话框

在代码中来实现一下。

创建对话框,需要添加头文件 #include <QDialog>

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //点击新建按钮,弹出一个对话框
    connect(ui->actionNew,&QAction::triggered,[=](){
        //对话框有两种分类:模态(不可以对其他窗口进行操作)和非模态(可以对其他窗口进行操作)
        //模态创建
        QDialog dlg(this);//指定父亲,避免手动释放
        dlg.exec();//带有阻塞功能,没办法对其他窗口进行操作

        qDebug() << "模态对话框弹出了";
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行代码,点击新建按钮。会跳出对话框,如下图所示。
Qt -- 19模态和非模态对话框
当出现该对话框后,再想要点击其他窗口,不可以做到。而且在应用程序输出窗口也没有打印出调试信息。这是因为我们创建的对话框是模态对话框,当程序运行后,会被阻塞在

  dlg.exec();//带有阻塞功能,没办法对其他窗口进行操作

这句代码,当关闭对话框后,代码接着往下执行,应用程序输出窗口才开始输出调试信息。
Qt -- 19模态和非模态对话框
此外,还可以指定创建出来的对话框的大小。

 //点击新建按钮,弹出一个对话框
connect(ui->actionNew,&QAction::triggered,[=](){
    //对话框有两种分类:模态(不可以对其他窗口进行操作)和非模态(可以对其他窗口进行操作)
    //模态创建
    QDialog dlg(this);//指定父亲,避免手动释放
    dlg.resize(200,200);
    dlg.exec();//带有阻塞功能,没办法对其他窗口进行操作

    qDebug() << "模态对话框弹出了";
});

还有另外实现模态对话框的方式。
一、
Qt -- 19模态和非模态对话框
二、
Qt -- 19模态和非模态对话框
代码如下,

this->setWindowModality(Qt::ApplicationModal);

实现非模态对话框

代码如下:

//点击打开按钮,弹出一个非模态对话框
connect(ui->actionOpen,&QAction::triggered,[=](){

    QDialog dlg2(this);
    dlg2.resize(200,200);

    dlg2.show();
    qDebug() << "非模态对话框弹出了";
});

运行程序,会发现窗体一闪而过。

是因为执行完 dlg2.show(); 这句代码后,对话框就消失了。本质原因是这个对象被放置在栈上了,我们要把它放置在堆上面。

代码如下:

//点击打开按钮,弹出一个非模态对话框
connect(ui->actionOpen,&QAction::triggered,[=](){

    QDialog * dlg2 = new QDialog(this);
    dlg2->resize(200,200);

    dlg2->show();
    qDebug() << "非模态对话框弹出了";
});

非模态对话框可以对其他窗口进行操作。

虽然利用上述代码可以实现一个非模态对话框,但是存在以下问题,一是每次点击都会重新在堆上创建出来一个对话框。
Qt -- 19模态和非模态对话框
二是关闭对话框并不会释放堆上面的内存,只有关闭(总)窗体,这些堆上的对象才会释放。如果一直点下去,就会一直耗费内存资源。

那怎样解决呢?

可以通过设置这个对象的属性来解决。需要用到设置属性函数 setAttribute ,来查看下帮助文档。

那应该看哪一个下面的 setAttribute 函数介绍呢?我们写的是对话框,所以应该查看 QDialog 类下面的,但是帮助文档中并没有,我们就应该看它父类是谁,

// An highlighted block
var foo = 'bar';

可知,QDialog 继承与 QWidget ,所以应该看 QWidget 的 setAttribute 。
Qt -- 19模态和非模态对话框
窗体的属性有很多,点 Qt::WidgetAttribute attribute,这一项进去看下(一般这样的、绿色的就代表着是枚举值。),
Qt -- 19模态和非模态对话框
枚举值有很多,也代表着属性很多。

这里直接说下应该设置哪个属性,应该使用值为 55 的那个属性。

Qt -- 19模态和非模态对话框
该属性可以在关闭对话框的时候就将其在堆上的内存给释放掉。文章来源地址https://www.toymoban.com/news/detail-404870.html

到了这里,关于Qt -- 19模态和非模态对话框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序wx.showModal模态对话框中content换行

    解决方案:使用“rn”换行 注意:微信开发者工具上并不会换行只是会有空格,但是实际运行手机上是有换行效果的!  这是微信开发者工具的效果: 这是手机上显示的效果:          .join(\\\'\\\') 将数组用\\\"\\\"连接成为一个字符串         .slice(0, -4) 截取掉数组最后一项的

    2024年02月03日
    浏览(38)
  • Qt标准对话框:8大对话框详解

    颜色对话框类 QColorDialog 提供了一个可以获取指定颜色的对话框的对话框部件: 这里使用 QColorDialog 的静态函数 getColor () 来获取颜色,执行时弹出颜色选择对话框: 返回的是一个 QColor 类型的数据: 这四个数值分别代表:透明度(alpha)、Red、Green、Blue。它们的默认值都是

    2024年02月03日
    浏览(61)
  • Python Qt6快速入门-自定义对话框和标准对话框

    对话框是有用的 GUI 组件,可以与用户进行交流(因此得名对话框)。 它们通常用于文件打开/保存、设置、首选项或不适合应用程序主 UI 的功能。 它们是位于主应用程序前面的小模态(或阻塞)窗口,直到它们被关闭。 Qt 为最常见的用例提供

    2024年02月03日
    浏览(53)
  • 【QT】标准对话框

    目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3.选择已有目录 4.选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2.输入整数 3.输入浮点数 4.下拉列表选择输入 6 QMessageBox消息对话框 1.函数原型 2.简单信息

    2024年02月02日
    浏览(58)
  • 【Qt】:对话框(二)

    Q提供了多种可复用的对话框类型,即Qt标准对话框。Qt标准对话框全部继承于QDialog类。常用标准对话框如下: 消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进行选择操作。 QMessageBox自己内置了一些图标和按钮,我们可以直接

    2024年04月16日
    浏览(64)
  • 【Qt】:对话框(一)

    对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。 Qt常用的内置对话框有: QFiledialog (文件对话框). QColorDialog(颜色对话框)、 QFontDialog(字

    2024年04月14日
    浏览(83)
  • Qt对话框

    颜色对话框: 字体对话框: 输入对话框: 消息对话框:

    2024年02月06日
    浏览(48)
  • Qt标准对话框设置

    Qt标准对话框设置,设置字体、调色板、进度条等。

    2024年02月22日
    浏览(57)
  • Qt自定义对话框

    自定义框主要通过对现有对话框QDialog类的派生,根据需求编写成员函数、重载信号函数、槽函数,进而实现在主QWidget中点击某个按钮后,一个对话框的弹出 简化创建派生类 最后点击完成即可。 自定义ui界面,编写成员函数等 主窗口触发槽函数编写 这里常有一个固定的格式

    2024年02月13日
    浏览(50)
  • Qt第六章对话框

    模态对话框:在弹出对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到对话框关闭 非模态对话框:又叫无模式对话框,即弹出非模态对话框时,用户仍然可以对其他窗口进行操作 半模态对话框:介于模态和非模态之间,会阻塞窗口的响应

    2024年04月14日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包