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

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}}
}

相关内容

热门资讯

中信证券:2026年度造纸行业... 转自:财联社【中信证券:2026年度造纸行业预计底部改善 金属包装行业将迎来春天】财联社11月21日...
财联社汽车早报11月21日 转自:财联社两部门发布《新能源汽车政府采购需求标准(征求意见稿)》11月20日,财政部会同工业和信息...
四川阆中警方凌晨通报 转自:北京日报客户端11月21日凌晨,四川省阆中市公安局发布“警情通报”:11月20日,阆中市一学生...
@近视的你 当心甜食正在悄悄损... 来源:央视新闻客户端 用眼过度、强光刺激……这些常见的视力“杀手”相信大家都不陌生但日常生活中有一个...
直击车展 | MoLA架构发布...   Hehson科技讯 11 月 21日上午消息,在华为乾崑生态大会上,华为智能汽车解决方案 BU ...