当前位置: 首页 > news >正文

QML学习笔记(四十二)QML的MessageDialog

前言

MessageDialog是QML中的一个消息弹窗组件,它可以提供简单的消息提示,也可以实现简单的yes or no的选择。它在Qt6中会有几种模式,需要根据不同的场景灵活选择。它也和QWidget中的QMessageBox是同一个层级的产物。

一、代码例子

import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.14
import QtQuick.Dialogs 1.3Window {visible: truewidth: 640height: 480title: qsTr("QmlMessageDialog")Row {anchors.centerIn: parentspacing: 10Button {text: "询问"onClicked: askDlg.open()}Button {text: "警告"onClicked: warnDlg.open()}}MessageDialog {id: askDlgtitle: "提示"text: "确定要执行操作吗?"informativeText: "此操作不可撤销"icon: MessageDialog.QuestionstandardButtons: MessageDialog.Yes | MessageDialog.NoonYes: console.log("用户点了 Yes")onNo:  console.log("用户点了 No")}MessageDialog {id: warnDlgtitle: "提示"text: "确定要执行操作吗?"informativeText: "此操作不可撤销"icon: MessageDialog.QuestionstandardButtons: MessageDialog.YesonYes: console.log("用户点了 Yes")}
}

在这里插入图片描述
在这里插入图片描述
如果是Qt6高版本,可以用qusetion或warning这种接口直接打开,但是我当前版本只能默认用open弹窗。
我希望实现类似QMessageBox的功能,查找帮助文档会有这种默认图标的选择:
在这里插入图片描述
还可以自由组合自己想要的按钮,实现对应的信号槽:
在这里插入图片描述
可以看到不同的按钮会对应到不同的role,比如Ok和Save对应的都是AcceptRole,对应的处理器是onAccepted。如果你足够敏锐,就应该避免两种按钮的混用,因为它们对应的都是同一个处理器。它们可没有单独的onSave、onOk这种处理器。
它的信号也就只有这么多:
在这里插入图片描述
值得一提的是,这些按钮的文本无法自定义,可以加载官方qm翻译文件来实现。实在不行只能放弃这种弹窗,然后自行实现。

二、对比QMessageBox

QMessageBox是QWidget中的消息弹窗,也常被称为消息盒子。
它的使用也很简单,常常在c++代码中这样写:

/* 一行弹窗,一行判断 */
int ret = QMessageBox::question(nullptr,           // 父窗口"提示",            // 标题"确定要退出吗?",   // 正文QMessageBox::Yes | QMessageBox::No,QMessageBox::No);  // 默认按钮
if (ret == QMessageBox::Yes)qDebug() << "用户点了 Yes";
elseqDebug() << "用户点了 No";

我们可以已制定标题、正文,也同样可以指定需要的按钮。
这种方法是快速弹窗,你可以自行new一个对象出来,然后exec模态弹出。
这里给一个kimi提供的对比总结:

维度QML MessageDialogQWidget QMessageBox
模块QtQuick.Dialogs 1.x / labs-platformQtWidgets
外观系统原生(Win/macOS/Linux Shell)Qt 自绘(随 QStyle)
按钮文字系统语言(改不了)qt_xx.qm 可翻译
图标系统图标Qt 内置图标
富文本基本 HTML 子集完整 HTML
自定义按钮只能用标准枚举可任意 addButton(text, role)
信号/槽accepted() / rejected() / clicked(button)buttonClicked(QAbstractButton*)
使用方式一行 open()exec()static 函数
最小依赖QML 场景QWidget 场景
典型代码见下见下

三、总结

无论qml还是qwidget,消息弹窗都是非常非常非常常用的一个组件,要求不高的话我们可以直接使用默认,但如果要求较高,希望实现漂亮样式的话,我会建议我们自己重新手搓一个,因为这其实比较简单,只要有足够的时间成本。

http://www.dtcms.com/a/495945.html

相关文章:

  • 国内专业网站建设公司东莞市建设规划局网站
  • [Linux系统编程——Lesson15.文件缓冲区]
  • 江苏天德建设工程有限公司网站黄冈公司网站建设平台
  • springboot中server.main.web-application-type=reactive导致的拦截器不生效
  • 1688黄页网免费网站做外贸服饰哪个个网站好
  • 杭州做企业网站公司网络营销策略应遵循的原则
  • 对“机器人VCU”进行一个详细、系统的讲解。
  • 陕西省城乡住房和建设厅网站网站建设shzanen
  • 49.字母异位词分组
  • 移动网站登录入口wordpress孕婴模板
  • 网站开发的四个高级阶段包括天津网站优化流程
  • 3.6 第一个JSON Schema(一)
  • 指针终极理解
  • 门头沟区专业网站制作网站建设wordpress登录框插件
  • 没网站做推广wordpress建站 域名
  • 企业客户管理优化方案:构建高效客户关系体系
  • 【隐语SecretFlow用户案例】亚信科技构建统一隐私计算框架探索实践
  • Win11系统安装TranslucentTB报错解决
  • 国外唯美flash个人网站欣赏资阳房产网站建设
  • 营销型企业网站怎么建站虚拟商品自动发货网站搭建教程
  • 网站文件命名规则网站做电源
  • ProE/Creo模型高效转换3DXML技术方案:在线转换工具全解析
  • 投资网站策划wordpress配置七牛
  • 吉林电商网站建设公司哪家好旅游网页制作教程
  • C#实现SQL Server→Snowflake建表语句转换工具
  • 一种面向 AIoT 定制化场景的服务架构设计方案
  • 免费做网站刮刮卡舆情查询
  • 深圳建设厅网站官网免费虚拟主机官网
  • 塑胶制造生产ERP:有哪些系统值得关注
  • 怎么学习做网站vue is做的购物网站