qml 无边框

qml 无边框

来源 https://github.com/myml/qml-monitor/wiki/Qt%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B4%EF%BC%9A%E6%97%A0%E8%BE%B9%E6%A1%86%EF%BC%8C%E9%BC%A0%E6%A0%87%E6%8B%96%E5%8A%A8

参考 https://www.cnblogs.com/mcumagic/p/5806153.html

参考 https://blog.csdn.net/wzj0808/article/details/79459242

 

因为要做的是悬浮窗,无边框那是肯定的 flags属性控制窗口样式 无边框属性是Qt.FramelessWindowHint 代码

import QtQuick.Controls 1.4

ApplicationWindow {
	visible: true
	width: 250
	height: 50
	flags: Qt.FramelessWindowHint
}

其中visible是是否可见,宽高就不用说了

没有边框怎么拖动呢?这就要加上鼠标事件了,QML的鼠标事件是这样写的

import QtQuick.Controls 1.4

ApplicationWindow {
	visible: true
	width: 250
	height: 50
	flags: Qt.FramelessWindowHint

	MouseArea {
		anchors.fill: parent
		onPressed: {
			console.log("点击事件")
		}
	}
}

MouseArea是鼠标区域元素,anchors是布局属性,fill表示填充到一个对象,parent是父元素也就是ApplicationWindow

console.log写过js的应该都知道,在qml里就是用js来处理一些简单的界面逻辑。 完整的鼠标拖动窗口代码

import QtQuick 2.6
import QtQuick.Controls 1.4

ApplicationWindow {
	id: root
	visible: true
	width: 250
	height: 50
	flags: Qt.FramelessWindowHint

	MouseArea {
		anchors.fill: parent
		property int mx: 0
		property int my: 0
		onPressed: {
			mx=mouseX
			my=mouseY
		}
		onPositionChanged: {
			root.x+=mouseX-mx
			root.y+=mouseY-my
		}
	}
}

这里用到了property自定义属性,用来存储鼠标按下时的坐标
QML里坐标永远是相对父元素的,在这里就是用mx,my记录鼠标按下时,鼠标在窗口的哪个位置
onPositionChanged是鼠标坐标改变事件
这里用到了root,root是谁?注意ApplicationWindow的开头,添加了一个id: root,所以root代表主窗口
在QML里ID是唯一的
当前坐标-鼠标按下时坐标就是拖动的距离,把主窗口的位置加上拖动距离就实现了鼠标拖动

 

========= End

 

posted @   lsgxeva  阅读(1131)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2019-04-28 TCP/IP的四元组、五元组、七元组
2018-04-28 Centos7系统rc.local不起作用问题
点击右上角即可分享
微信分享提示