QML之窗口(无边框、透明及拖拽)
1.无边框
Qt Quick 2.0 中 QQuickView代替了1.0中的QDeclarativeView。
无边框窗口代码如下:
QQuickView viwer;
//QQuickView继承自QWindow而不是QWidget
viwer.setFlags(Qt::FramelessWindowHint);
2.窗口透明
setOpacity可设置整个窗口(包括控件)的透明度,而背景透明则应使用setColor
//设置窗口颜色,以下为透明,在viwer.setSource()之前使用 viwer.setColor(QColor(Qt::transparent)); //QWidget用setAttribute(Qt::WA_TranslucentBackground,true)
3.拖拽窗口
拖拽窗口需要将窗口(viewer)设置为qml中的属性
viwer.rootContext()->setContextProperty("mainwindow",&viwer);
main.cpp如下
/*---main.cpp---*/
#include<QApplication>
#include<QQuickView>
#include<QColor>
#include<QQmlContext>
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
QQuickView viwer;
//无边框,背景透明
viwer.setFlags(Qt::FramelessWindowHint);
viwer.setColor(QColor(Qt::transparent));
//加载qml,qml添加到资源文件中可避免qml暴露
viwer.setSource(QUrl("qrc:/qml/main.qml"));
viwer.show();
//将viewer设置为main.qml属性
viwer.rootContext()->setContextProperty("mainwindow",&viwer);
return app.exec();
}
此时,main.qml如下即可实现透明,无边框,可拖拽
/*--main.qml--*/
importQtQuick2.
Rectangle{
width:
height:
//灰色0.9透明度
color:Qt.rgba(0.5,0.5,0.5,0.9)
MouseArea{
id: dragRegion
anchors.fill: parent
property point clickPos:"0,0"
onPressed:{
clickPos =Qt.point(mouse.x,mouse.y)
}
onPositionChanged:{
//鼠标偏移量
var delta =Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
//如果mainwindow继承自QWidget,用setPos
mainwindow.setX(mainwindow.x+delta.x)
mainwindow.setY(mainwindow.y+delta.y)
}
}
}
效果如下:
添加关闭按钮
importQtQuick2.
Rectangle{
width:
height:
//灰色0.9透明度
color:Qt.rgba(0.5,0.5,0.5,0.9)
MouseArea{
id: dragRegion
anchors.fill: parent
property point clickPos:"0,0"
onPressed:{
clickPos =Qt.point(mouse.x,mouse.y)
}
onPositionChanged:{
//鼠标偏移量
var delta =Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
//如果mainwindow继承自QWidget,用setPos
mainwindow.setX(mainwindow.x+delta.x)
mainwindow.setY(mainwindow.y+delta.y)
}
}
//要置于MouseArea之后,否则无法响应鼠标点击
Rectangle{
id:closeBtn
height:
width:
anchors.right: parent.right
anchors.rightMargin:
anchors.top: parent.top
anchors.topMargin:
color:"#aaff0000"
Text{
text:"x"
anchors.centerIn: parent
}
MouseArea{
anchors.fill: parent
onClicked:
{
//Qt.quit()无法关闭窗口
mainwindow.close()
}
}
}
}
QML之窗口(无边框、透明及拖拽)的更多相关文章
- winform 窗体设置成无边框、可拖拽、四周圆角
最近做一个及时通讯系统的登录界面,现在将界面用到的无边框.可拖拽.四周圆角的方法分享如下: 1.无边框的窗体: 把FormBorderStyle的属性设置为none 2.可拖拽:private Poi ...
- [Winform]无边框窗口悬浮右下角并可以拖拽移动
摘要 简单实现了一个这样的功能,程序启动时,窗口悬固定在右下角,并可以通过鼠标拖拽移动. 核心代码块 无边框窗口并不出现在任务栏 //无边框 this.FormBorderStyle = System ...
- Qt5.3中qml ApplicationWindow设置窗口无边框问题
这个版本的qt在这里有点bug.. 设置ApplicationWindow的flags属性为Qt.FramelessWindowHint的确可以使程序无边框,但是同时程序在任务栏的图标也没了. 看文档 ...
- C# WinForm设置窗口无边框、窗口可移动、窗口显示在屏幕中央、控件去边框
1)窗口去除边框 在组件属性中FormBorderStyle设为None 2)窗口随着鼠标移动而动 添加引用using System.Runtime.InteropServices; 在初始化控件{I ...
- WPF 无边框透明按钮
在实际开发过程中,有时候要设置一个无边框的按钮,或者无边框的透明按钮. 按钮效果如下: 1.当你应用telerik组件中的Button时,这个直接就可以设置 telerik:StyleManager. ...
- WPF 无边框透明窗体
WindowStyle="None"--无边框,如果需要其它按钮,如缩小.放大.收缩.关闭按钮,可以自定义 AllowsTransparency="True"- ...
- 2017年11月20日 WinForm窗体 窗口无边框可移动&&窗口阴影 控制窗口关闭/最小化
弹框 MessageBox.Show(); 清空 clear() 字符串拼接 string 公共控件 button 按钮 checkbox 复选框 checklistbox 多个复选框 combobo ...
- C# 实现窗口无边框,可拖动效果
#region 无边框拖动效果 [DllImport("user32.dll")]//拖动无窗体的控件 public static extern bool ReleaseCaptu ...
- pyqt5 窗口无边框和透明
https://blog.csdn.net/FanMLei/article/details/79433229 按钮圆形方法属性border-radius:30px; QScrollArea 无法滚动用 ...
随机推荐
- iOS证书快要过期怎么办?
说法一: 1.先revoke你的Certificate,重新生成一个新的. 2.Edit一下你的证书,选择新的Certificate. 3.下载覆盖之前的证书,就可以了. 这个帐号发布的产品不会受到影 ...
- 用OpenGL简单编写的一个最简单贪吃蛇游戏
刚学OpenGL的时候,写的一个最简单的贪吃蛇游戏代码 如下: //贪吃蛇游戏 #include<stdio.h> #include<stdlib.h> #include< ...
- FPGA同步复位异步复位
今天看了篇博客, 是拿altera的芯片和软件作例子的,讲同步异步复位的: http://blog.sina.com.cn/s/blog_bff0927b0101aaii.html 还有一个博客, h ...
- Java获取程序或项目路径的常用方法
在写java程序时不可避免要获取文件的路径,比较常用的方法有: 1 在任意的class里调用: this.getClass().getClassLoader().getResource("/ ...
- perl 分析mysql binlog
binlog 日志格式: use `zjzc`/*!*/; SET TIMESTAMP=1476326343/*!*/; UPDATE `ProductAccess` pa SET pa.access ...
- Asteroids(二分图最大匹配模板题)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12323 Accepted: 6716 Description Bess ...
- //string scriptstrs = "<script>alert('欢迎光临!');</script>";
//string scriptstrs = "<script>alert('欢迎光临!');</script>"; //if (!Page.ClientSc ...
- MFC对话框应用程序添加自定义消息
1. 定义自定义消息 /** * \brief 消息测试 */ #define E6100_MSG_TEST ( WM_USER + 1001 ) 2. 声明自定义消息处理函数 /* ...
- 彻底解决Unknown ASTNode child: LambdaExpression 错误
错误原因: 在于 androidStudio lint检查的时候 会把Lamda表达式 认为是错误的.解决办法: 1.打开项目中中的lint.xml改为如下格式: <?xml ...
- javascript 四舍五入
原生 javascript 中四舍五入的函数 toFixed(n) , n为要保留的小数位数. (0<= n <=20) var num=1.0999; console.log(num.t ...