QML- Button 理论及使用
创始人
2024-06-02 12:47:00
0

Button 理论使用总结

  • 一、概述
  • 二、简单使用
    • 1. 界面外观使用
    • 2. 事件处理
  • 三、其他属性
  • 四、定制外观
    • 1. 镂空效果
    • 2. 填充效果

一、概述

这里记录一下Button 的一些理论使用,QtQuick.Controls 的 Button 表示用户可以按下或单击的按钮控件。这个控件其实就是代表一个按钮,和QPushButton 一样的功能,按钮通常用于执行一个动作,或回答一个问题。典型的按钮有 确定、应用、取消、关闭、是、否和帮助 等等 。

就像这种效果
在这里插入图片描述
在这里插入图片描述

这个Button 是继承至 AbstractButton, 那Button就可以使用他的父类的一些功能。我们就可以设置 text, 展示一个图标 icon, 以及响应 clicks 点击事件之类的。

二、简单使用

在使用这个控件的时候,需要引入对应的控件库。这里版本和Qt 版本有些区别,但是不大,只要是大版本的Controls 2 xx 就差不多,如果是 Controls 1xx 那就和 Controls 2xx 有些区别,我这里是 Qt 5.14.2 的Qt版本。

import QtQuick.Controls 2.14
import QtQuick.Controls 2.5

1. 界面外观使用

上面的例子代码如下

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5Window {visible: truewidth: 640height: 480title: qsTr("Hello World")GridLayout{columns: 5rows: 1anchors.fill: parentButton{text:"OK"Layout.column: 0Layout.alignment: Qt.AlignHCenter}Button{text:"Apply"Layout.column: 1Layout.alignment: Qt.AlignHCenter}Button{text:"Cancel"Layout.column: 2Layout.alignment: Qt.AlignHCenter}Button{icon.name: "image"icon.width: 60icon.height: 30icon.color: "transparent"icon.source: "./image/tupian.png"Layout.column: 3Layout.alignment: Qt.AlignHCenter}Button{text:"email"icon.name: "email"icon.color: "transparent"icon.source: "./image/youjian.png"Layout.column: 4Layout.alignment: Qt.AlignHCenter}}
}

2. 事件处理

Button 能够响应很多的事件,这个响应的事件很像 C# 里面的 EventHandeler 那种写法,这些事件都是继承至 AbstractButton 的事件。这些事件都是通过信号的来完成的,对应的信号就是对应的函数。

on+信号首字母大写: 单个函数
on+信号首字母大写{ 多条语句函数}

例如

  • onClicked:
  • onPressed:
信号
canceled()当被按下时,鼠标失去了对按钮的抓取,或者当它发出释放信号,但鼠标光标不在按钮内部时,就会发出这个信号。
clicked()当用户通过触摸、鼠标或键盘交互式地单击按钮时,就会发出这个信号。
doubleclick ()当用户通过触摸或鼠标交互式地双击按钮时,就会发出这个信号。
pressAndHold ()当用户通过触摸或鼠标交互式地按下并按住按钮时,就会发出这个信号。当启用autoRepeat时不会触发。
pressed()当用户通过触摸、鼠标或键盘交互式地按下按钮时,就会发出这个信号。
released()当用户通过触摸、鼠标或键盘交互地释放按钮时,就会发出这个信号。
toggled()当用户通过触摸、鼠标或键盘交互切换可检查按钮时,就会发出这个信号。这个信号在QtQuick中引入。对照组2.2 (Qt 5.9)。

下面的效果就是这些,
在这里插入图片描述

代码如下

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Button{text:"OK"Layout.column: 0Layout.alignment: Qt.AlignHCenteronClicked:console.log("Ok Btn Clicked!")}Button{text:"Apply"Layout.column: 1Layout.alignment: Qt.AlignHCenteronPressed:{console.log("Apply Btn Pressed!")}}
}

三、其他属性

  • flat : bool

这个属性指示这个按钮是否是 flat 按钮,平面按钮通常不会绘制背景,除非它被按下或选中。默认值为false。
感觉就是没有背景的效果的哈。

在这里插入图片描述

  • highlighted : bool

这个属性保存按钮是否高亮显示。按钮可以高亮显示以吸引用户的注意力。这里的高亮就是背景变黑的。它对键盘交互没有影响。默认值为false。


四、定制外观

Button 有两个 visual 子控件: background 和content item.,我们就重写这个就好啦,很简单的

1. 镂空效果

在这里插入图片描述

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Button {id: selfBtntext: qsTr("Button")contentItem: Text {text: selfBtn.textfont: selfBtn.fontopacity: enabled ? 1.0 : 0.3color: selfBtn.down ? "#17a81a" : "#21be2b"horizontalAlignment: Text.AlignHCenterverticalAlignment: Text.AlignVCenterelide: Text.ElideRight}background: Rectangle {implicitWidth: 100implicitHeight: 40opacity: enabled ? 1 : 0.3border.color: selfBtn.down ? "#17a81a" : "#21be2b"border.width: 1radius: 2}}
}

2. 填充效果

在这里插入图片描述

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Button {id: selfBtntext: qsTr("Button")contentItem: Text {text: selfBtn.textfont: selfBtn.fontopacity: enabled ? 1.0 : 0.3color: selfBtn.down ? "white" : "#e6f6e7"horizontalAlignment: Text.AlignHCenterverticalAlignment: Text.AlignVCenterelide: Text.ElideRight}background: Rectangle {implicitWidth: 100implicitHeight: 40opacity: enabled ? 1 : 0.3border.color: selfBtn.down ? "#17a81a" : "#21be2b"color: selfBtn.down ? "#17a81a" : "#21be2b"border.width: 1radius: 2}}
}

相关内容

热门资讯

住建部:2019年至2024年... 5月20日,国新办就《关于持续推进城市更新行动的意见》有关情况举行新闻发布会。发布会上,住房城乡建设...
英飞拓:应对重大风险 采取有效... 投资者提问:今天是2025年“5·15全国投资者保护宣传日”,公司因内控问题被ST;1月份又因信息披...
油气ETF华泰柏瑞(56157... 5月20日,截止午间收盘,油气ETF华泰柏瑞(561570)涨0.00%,报0.939元,成交额69...
天茂集团:公司母公司作为投资控... 每经AI快讯,有投资者在投资者互动平台提问:为什么100%业务是保险,不是还有其他业务,其他业务不并...
自然资源部:出台更多实用有效的... 5月20日,中国国务院新闻办公室在北京举行新闻发布会,住房和城乡建设部副部长秦海翔、自然资源部总规划...
沪深300ETF永赢(5635... 5月20日,截止午间收盘,沪深300ETF永赢(563520)涨0.52%,报0.974元,成交额7...
科创材料ETF(588160)... 5月20日,截止午间收盘,科创材料ETF(588160)涨0.00%,报0.604元,成交额209....
A500ETF指数(51202... 5月20日,截止午间收盘,A500ETF指数(512020)涨0.50%,报1.004元,成交额35...
江西省公布2025年先进级智能... 63家化工、新能源、新材料企业的智能工厂榜上有名中化新网讯 5月16日,江西省工业和信息化厅公布了1...
双创50ETF基金(58835... 5月20日,截止午间收盘,双创50ETF基金(588350)涨0.36%,报0.833元,成交额14...
中央委员任上被查!上周23人落... 转自:上观新闻中央纪委国家监委网站消息,上周(2025年5月12日—5月18日)中央纪委国家监委网站...
居民夜不能寐!乌鲁木齐一小区现... 乌鲁木齐晚报全媒体讯(记者江斌伟)吉尤…... 吉尤 …...” 4月底以来,每到夜晚,住在乌鲁木齐...
中证1000ETF增强(561... 5月20日,截止午间收盘,中证1000ETF增强(561280)涨0.80%,报1.139元,成交额...
一家三口溺亡?当地村委会称已打... 5月19日晚,有重庆网民在社交平台上爆料称,重庆开州区临江镇,疑发生父亲和一双儿女不幸溺亡。5月20...
环球印务:股价异动后发布利空公... 投资者提问:董秘在股价上涨时多次出现发布利空公告,是否存在刻意打压股价的意图,以配合特定股东或利益相...
大庆东光公安:反恐宣讲进校园 ... 中新网黑龙江新闻5月20日电(张子龙 刘璐)近日,大庆市公安局东光分局民警走进辖区幼儿园开展了一场充...
哈市香坊区绿化美化25所校园周... 中新网黑龙江新闻5月20日电(吴昌林)“有了这些长椅太好了,以后再来接孩子时间长了可以坐下歇歇了,想...
中证2000ETF(15953... 5月20日,截止午间收盘,中证2000ETF(159531)涨0.81%,报1.116元,成交额70...
龙姓股民向ST葫芦娃发起索赔 ...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...
蜘蛛侠园区就要来了! 转自:上观新闻栏目主编:王蔚 来源:作者:文汇报 徐晓斌