在QDialog中嵌入QML

2024-03-10 03:04
文章标签 嵌入 qdialog qml

本文主要是介绍在QDialog中嵌入QML,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  在一些一开始使用QWidget的项目,现由于要支持的硬件及系统已升级,可以很好的使用QML。在这种情况下,就需要通过QWidget与QML混合使用的方式来慢慢把整个项目过渡到纯QML工程。这时在QWidget中嵌入QML是经常要做的事,现就说一说在QDialog中嵌入QML的实现方式。
  项目中需要使用覆盖整个应用窗口的弹框且背景透明显来突出显示提示信息。
实现的效果
首先需要自定义基于QDialog的子类,通过setWindowFlags方法,把dialog设置为无边框,然后再通过setAttribute设置dialog的背景透明。

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);

获取应用主窗口的size,如果没有把主窗口共享出来,就需要通过QApplication的qApp宏来获取activeWindow。得到Window之后,通过geometry获取到窗口的Rect信息,然后设置dialog的size,并把dialog放在坐标系(0,0)的位置。

QRect rect = window->geometry();
qDebug() << rect;
this->resize(rect.size());
this->move(rect.topLeft());

之后,在该dialog中添加QQuickWidget用来加载qml文件。

    QVBoxLayout *vLayout = new QVBoxLayout;QQuickWidget *quickWidget = new QQuickWidget;vLayout->addWidget(quickWidget);setLayout(vLayout);quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);quickWidget->engine()->rootContext()->setContextProperty("applicationDirPath", QGuiApplication::applicationDirPath());quickWidget->setSource(QUrl("qrc:/CommonMessageBox.qml"));quickWidget->rootObject()->setProperty("msg", "full-2024-03-03 19-32-01-246.jpg");quickWidget->setClearColor(QColor(Qt::transparent));

qml文件代码

import QtQuick 2.15
import QtQuick.ControlsRectangle {id:idRectBg// width: 800// height: 600property string msg: ""color: "transparent"signal sigCloseSignal();Rectangle {id:idItemBluranchors.fill: parentcolor: "#DEced4da"smooth: true}Rectangle {id:idRectTitlewidth: parent.width - 100height: 200anchors.centerIn: parentcolor: "#669bbc"Text {id:idTextTitleanchors.centerIn: parenttext: msg}Button {id:idBtnCloseanchors.right: parent.rightanchors.top: parent.topwidth: 50height: 50text: "X"onClicked: {idRectTitle.visible = false;sigCloseSignal();}}}
}

这篇关于在QDialog中嵌入QML的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792820

相关文章

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

qml states 状态

states 状态 在QML中,states用于定义对象在不同状态下的属性变化。每个状态可以包含一组属性设置,当状态改变时,这些属性设置会被应用到对象上。 import QtQuick 2.15import QtQuick.Controls 2.15// 定义应用程序的主窗口ApplicationWindow {visible: true // 使窗口可见width: 640 /

QML入门之基本元素

元素分为可视元素与非可视元素,可能元素例如Rectangle、Button等。非可视元素如Timer(定时器)、MouseArea(鼠标区域)等。非可视元素一般用于操作可视元素。 基础元素 Item Item(基础元素对象)是所有可视元素的基础对象,它们都继承自Item。可是元素存在以下共有属性。 Group(分组)Properties(属性)Geometry(几何属性)x

Base64编码 及 在HTML中用Base编码直接显示图片或嵌入其他文件类型

1.为什么要用到BASE64编码的图片信息      Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64 主要不是加密,它主要的用途是把一些二进制数转成普通字符用于网络传输。由于一些二进制字符在传输协议中属于控制字符,不能直接传送需要转换一下。最常见的用途是作为电子邮件或WebService附件的传输编码.  2.base64编码定义    目前的internet

专业远程控制SDK嵌入,贝锐向日葵助力保利物业实现智能设备运维

为了实现更高质量的物业服务,很多物业企业在社区一线部署了大量的数字化自助式终端设备。这些设备可以为居民提供自助式的基础物业服务,有效提升了服务效率,居民满意度也得以提高。 一方面,物业企业通过引入此类设备,也逐步开始数字化转型,进而实现管理体系的迭代和降本增效;另一方面,面对数量多,分布广的智能设备,也需要企业构建对应的专业远程运维和技术支持体系,对其实施有效的管理,同时在用户自助使用出现问

as3.0 [Embed]标签嵌入外部资源

as3.0 [Embed]标签嵌入外部资源   空闲时间,总结一下[Embed]标签的用途,好记性不如烂笔头,记录下来,为方便查找。 1、[Embed]嵌入资源 ActionScript代码的顺序非常重要。你必须在声明变量前添加[Embed]元数据标签,而且这个变量的类型会是Class。 package { import flash.display.

关于QWidget和QDialog窗体居中的问题

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标。但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷。网上的两种方法,基本操作如下: 方法一:在窗口(QWidget类及派生类)的构造函数中

深入RAG优化:BGE词嵌入全解析与Landmark Embedding新突破

前面已经写过一篇关于Embedding选型的文章,《如何高效选择RAG的中文Embedding模型?揭秘最佳实践与关键标准!》,主要介绍通过开源网站的下载量和测评效果选择Embedding模型。 一、Embedding选型建议与结果 选型建议: 1、大部分模型的序列长度是 512 tokens。8192 可尝试 tao-8k,1024 可尝试 stella。 2、在专业数据领域上,嵌入

【matlab】进度条嵌入主GUI界面

点击打开链接  暂未实验成功,博主本人也不确定是否可行! 最近用到了waitbar,但是Matlab的waitbar总游离于主窗口之外,看起总是不是那么地爽于是想在论坛上找到把进度条嵌入到主GUI界面去的方法,不过没有找到现成的,只好自己动手了^_~ 在GUI主窗口找一个空地,放上一个axes,然后如下设置这个axes的参数属性: 'XLim',[0 100], 'YLim',[0 1

Java中如何使用嵌入MySQL

转自 https://my.oschina.net/eliyanfei/blog/779774 这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作。但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件。再去安装数据库可能就比较麻烦了。 其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代