自定义的标题栏按钮是由Rectangle来实现的,在Rectangle中需要4张图片,分别在鼠标进入按钮区、鼠标离开按钮区(正常状态下)、鼠标按下和鼠标释放时所加载的图片。下面是实现自定义按钮的代码(我把它放在了一个MaxButton.qml文件中):

Rectangle {
radius: 10 //设置圆角半径 property string normalPath //按钮正常和鼠标离开按钮区后的图片路径
property string enterPath //鼠标进入按钮区域时的图片路径
property string pressPath //鼠标按下时的图片路径
property string releasedPath //鼠标释放后的图片路径 signal buttonClick() //鼠标点击时发送此信号 Image {
id: background
anchors.fill: parent
source: normalPath
} MouseArea { //处理鼠标事件
anchors.fill: parent
hoverEnabled: true //处理没有按下时的鼠标事件
onClicked: buttonClick() //点击按钮时发送buttonClick信号
onEntered: background.source = enterPath //鼠标进入按钮区
onPressed: background.source = pressPath //鼠标按下
onExited: background.source = normalPath //鼠标离开按钮区
onReleased: background.source = releasedPath //鼠标释放
}
}

可以用它来实现标题栏中的关闭和最小化按钮。如果要想用它来实现最大化按钮还需要在他的父类中添加一些东西。因为窗口有两种状态,一种是正常大小,一种是最大窗口,所以要先在父类中判断窗口此时处在什么样的状态下,然后在将最大化按钮展现出不同的效果。以下是我在用它实现最大化按钮时在父类中的代码:

/**定义一个windowStatus属性来保存此时窗口的状态,
*等于true时说明窗口此时处于正常大小,
*等于false时说明窗口此时处于最大化状态
**/
property bool windowStatus: true MaxButton {//定义最大化按钮
id: maxButton
width: 35
height: 25 anchors.top: parent.top
anchors.right: closeButton.left //因为加载的窗口默认正常大小,所以初始化按钮时加载窗口处于正常状态下的图片
normalPath: "qrc:/image/全屏_2.png"
enterPath: "qrc:/image/全屏_3.png"
pressPath: "qrc:/image/全屏_1.png"
releasedPath: "qrc:/image/全屏_2.png" onButtonClick: maxButtonClicket()
}
function maxButtonClicket() {
if(windowStatus) {//检查此时窗口的状态
//windowStatus=true说明窗口此时处于正常大小 windowStatus = false //改变窗口状态 mainWindow.showMaximized() //将窗口最大化 //重新加载窗口最大化后的最大化按钮图标
maxButton.normalPath = "qrc:/image/窗口_2.png"
maxButton.enterPath = "qrc:/image/窗口_3.png"
maxButton.pressPath = "qrc:/image/窗口_1.png"
maxButton.releasedPath = "qrc:/image/窗口_2.png" }else { //windowStatus=false说明窗口此时处于最大化 windowStatus = true mainWindow.showNormal() //将窗口改为正常大小 maxButton.normalPath = "qrc:/image/全屏_2.png"
maxButton.enterPath = "qrc:/image/全屏_3.png"
maxButton.pressPath = "qrc:/image/全屏_1.png"
maxButton.releasedPath = "qrc:/image/全屏_2.png"
}
}

qml实现自定义标题栏按钮的更多相关文章

  1. 【Android UI】自定义带按钮的标题栏

    自定义标题栏在很多的android app中很常见,可以说是一种很有用的UI设计方法.自 己也本着学习的态度,经过一番各种坑,终于实现了,现总结如下: 一:大致流程 1.      对指定的andro ...

  2. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  3. Android应用开发基础篇(14)-----自定义标题栏

    一.概述 每一个应用程序默认的标题栏(注意与状态栏的区别)只有一行文字(新建工程时的名字),而且颜色.大小等都是固定的,给人的感觉比较单调.但当程序需要美化的时候,那么修改标题栏是就是其中一项内容,虽 ...

  4. [置顶] xamarin android自定义标题栏(自定义属性、回调事件)

    自定义控件的基本要求 这篇文章就当是自定义控件入门,看了几篇android关于自定义控件的文章,了解了一下,android自定义控件主要有3种方式: 自绘控件:继承View类,所展示的内容在OnDra ...

  5. Android 自定义标题栏

    开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮的点击事件 一.代码 这里先介绍一下流程 ...

  6. WPF中自定义标题栏时窗体最大化处理之WindowChrome

    注意: 本文方法基础是WindowChrome,而WindowChrome在.NET Framework 4.5之后才集成发布的.见:WindowChrome Class 在.NET Framewor ...

  7. C#自定义Button按钮控件

    C#自定义Button按钮控件 在实际项目开发中经常可以遇到.net自带控件并不一定可以满足需要,因此需要自定义开发一些新的控件,自定义控件的办法也有多种,可以自己绘制线条颜色图形等进行重绘,也可以采 ...

  8. WPF 应用完全模拟 UWP 的标题栏按钮

    WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式.然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当 ...

  9. Qt-第一个QML程序-4-自定义按钮类,动画,状态

    上篇中,我们写到了自己定义了一个按钮,但是呢,按照这样的写法,要写一个程序出来,那要累死了,所以,qml给我的感觉就是各种随便调用,所以了,可以自己写一个自己Button的qml,这样在以后用到了,就 ...

随机推荐

  1. [Effective C++ --031]将文件间的编译依存关系降至最低

    引言:编译时间成本 在项目中我们都会碰到修改既存类的情况:某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分. 重新build这个程序,并预计只花数秒就好,当按 ...

  2. HBase-分布式安装

    HBase的安装很简单,也是分为单机伪分布式和分布式 先保证hadoop环境JDK环境,我的是2.2.0和1.6_45 1.确定hadoop正常 2.上传HBase并解压,我用的是和hadoop2.2 ...

  3. Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item

    1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...

  4. mysql颠覆实战笔记(七)--白话理解事务

    今天我们学习web开发级mysql颠覆实战课程第9课没MYSQL事务(一):白话理解事务.前面有两节课第7讲:商品系统设计(四):商品属性设计之自定义属性,第8讲:商品系统设计(五):一维属性的商品价 ...

  5. 配置hibernate例子

    一.hiberbate.cfg.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hib ...

  6. Redis中文显示为Unicode编码的解决办法

    通过Xshell远程连接Linux中的Redis数据库.... 存入Reids中的value有中文. Xshell得到之后中文并不显示为乱码,显示的是中文对应的Unicode编码: 在Xshell中字 ...

  7. [改善Java代码]推荐覆写toString方法

    建议49: 推荐覆写toString方法 为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码: public ...

  8. 【记忆化搜索】Codeforces Round #295 (Div. 2) B - Two Buttons

    题意:给你一个数字n,有两种操作:减1或乘2,问最多经过几次操作能变成m: 随后发篇随笔普及下memset函数的初始化问题.自己也是涨了好多姿势. 代码 #include<iostream> ...

  9. Kafka分布式消息模型

    Kafka开发的主要初衷目标是构建一个用来处理海量日志,用户行为和网站运营统计等的数据处理框架.在结合了数据挖掘,行为分析,运营监控等需求的情况下,需要能够满足各种实时在线和批量离线处理应用场合对低延 ...

  10. 小技巧之a标签自动解析URL

    我们可能都知道javascript中的window.location对象用来获取当前页面的地址URL,并把浏览器重定向到新的页面.它有protocol.hostname.host.port.searc ...