Qt Quick 常用控件:Button(按钮)用法及自定义

642 篇文章 258 订阅
订阅专栏

1、简介

Button 是很常见的控件

Button QML Type

Push-button that can be clicked to perform a command or answer a question. More...

Import Statement: import QtQuick.Controls 2.5

Since: Qt 5.7

Inherits: AbstractButton

Inherited By: RoundButton and ToolButton

根据以上可知,在 QML 中要使用 Buttoon,需要先导入控件库 import QtQuick.Controls 2.5,使用其它控件也是一样,都需要导入这个库。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

在界面上添加一个按钮:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
 
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
 
    Button{
        x:100  // 设置按钮的横坐标
        y:100  // 设置纵坐标
        text:"我是按钮"   // 按钮文本
 
        // 信号槽连接
        onClicked: {
            console.log("我被点击了")
        }
    }
}

上面只设置了 Button 基本的文本属性和 onClicked 事件处理,下面说说 QML 按钮的其它属性及用法。

2、属性

  • flat

此属性决定按钮是否为扁平。除非按下或选中按钮,否则通常不会绘制按钮的背景。默认值为 false。

  • highlighted

此属性决定按钮是否突出显示。可以突出显示一个按钮,以吸引用户的注意。 它对键盘交互没有影响。默认值为false。

  • enabled

设置是否使能。默认值为 true。

  • font.pointSize

设置字体大小。

3、信号槽连接

在 Button 的父类 AbstractButton 可以找到如下信号:

canceled()
clicked()
doubleClicked()
pressAndHold()
pressed()
released()
toggled()

按钮信号槽写法:on + 信号首字母大写,例如下面的代码,写了一个点击事件,代码如下:

// 信号槽连接,单击信号
onClicked: {
	console.log("我被点击了")
}

槽函数代码的 3 种写法

(1)调用外部 JS 函数;

(2)函数调用时大括号也可以不写;

(3)用控件的 id 调用,例如给 Button 添加了一个属性 id:myButoon。

Button{
    id:myButoon
    x:100 
    y:100
    text:"我是按钮"

    // 信号槽连接,单击信号
    onClicked: {
        console.log("我被点击了")
    }

    // 模拟外部JS函数
    function slotDouble(){
        console.log("我被双击了")
    }

    // 1.调用外部 JS 函数
    //onDoubleClicked: {
    //slotDouble();
    //}

    // 2.函数调用时大括号也可以不写
    //onDoubleClicked: slotDouble()

    // 3.用控件的 id 调用
    //onDoubleClicked: myButoon.slotDouble()
}

4、自定义按钮

先看下实现效果,未点击任何按钮时:

点击确定按钮时:

 

点击 OK 按钮时:

 

(1)纯代码方式,使用 color 属性来设置点击前和点击后的字体、背景和边框颜色以美化按钮,MyButton.qml 的内容如下:

import QtQuick 2.9
import QtQuick.Controls 2.4

Button {
    id: root_Button
    font.pointSize: 16 // 设置字体大小

    property color clr_font: "#ffffff"
    property color clr_backNormal: "#498ff8"
    property color clr_backPress: "#0066FF"
    property color clr_boardNormal: "#498ff8"
    property color clr_boardPress: "#0066FF"

    // 设置按钮文本
    contentItem: Text {
        id: text2
        text: root_Button.text
        font: root_Button.font
        opacity: enabled ? 1.0 : 0.3
        color: clr_font
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        elide: Text.ElideRight
    }

    // 设置按钮背景
    background: Rectangle {
        implicitWidth: 100
        implicitHeight: 40
        opacity: enabled ? 1 : 0.3
        color: root_Button.down ? clr_backPress : clr_backNormal
        border.color: root_Button.down ? clr_boardPress : clr_boardNormal
        border.width: 1
        radius: 6
    }
}

(2)使用三张图片资源来实现按钮的三态,ThreeIconButton.qml 的内容如下:

import QtQuick 2.0
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Button
{
    id: root_Button
    property string nomerPic: "qrc:/image/ok.png"
    property string hoverPic: "qrc:/image/ok1.png"
    property string pressPic: "qrc:/image/ok2.png"

    style: ButtonStyle {
        background:Rectangle{
            implicitHeight: root_Button.height
            implicitWidth:  root_Button.width

            color: "transparent"  // 设置背景透明,否则会出现默认的白色背景

            BorderImage {
                anchors.fill: parent
                source: control.hovered ? (control.pressed ? pressPic : hoverPic) : nomerPic;
            }
        }
    }
}

(3)使用 Rectangle 来重写按钮,同时显示图标和下方的提示文本,以及定义了点击和释放信号槽,MyIconButton.qml 的内容如下:

import QtQuick 2.0

Rectangle {
    id: rec

    property alias img_src: icon.source
    property alias btn_txt: button.text

    property color clr_enter: "#dcdcdc"
    property color clr_exit: "#ffffff"
    property color clr_click: "#aba9b2"
    property color clr_release: "#ffffff"

    //自定义点击信号
    signal clickedLeft()
    signal clickedRight()
    signal release()

    width: 130
    height: 130
    radius: 10

    Image {
        id: icon
        width: 80
        height: 80
        source: "qrc:/camera.png"
        fillMode: Image.PreserveAspectFit
        clip: true
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.left: parent.left
        anchors.margins: 10
    }

    Text {
        id: button
        text: qsTr("button")

        anchors.top: icon.bottom
        anchors.topMargin: 5
        anchors.horizontalCenter: icon.horizontalCenter
        anchors.bottom: icon.bottom
        anchors.bottomMargin: 5

        font.bold: true
        font.pointSize: 14
    }

    MouseArea {
        id: mouseArea
        anchors.fill: parent
        hoverEnabled: true

        //接受左键和右键输入
        acceptedButtons: Qt.LeftButton | Qt.RightButton
        onClicked: {
            //左键点击
            if (mouse.button === Qt.LeftButton)
            {
                parent.clickedLeft()
//                console.log(button.text + " Left button click")
            }
            else if(mouse.button === Qt.RightButton)
            {
                parent.clickedRight()
            }
        }

        //按下
        onPressed: {
            color = clr_click
        }

        //释放
        onReleased: {
            color = clr_enter
            parent.release()
        }

        //指针进入
        onEntered: {
            color = clr_enter
        }

        //指针退出
        onExited: {
            color = clr_exit
        }
    }
}

(4)实际调用代码:

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.4

Window {
    visible: true
    width: 800
    height: 480
    title: qsTr("Hello World")

    Grid {
         columns : 3
         rows: 2
         spacing: 80
         anchors.centerIn: parent

         MyButton{
             id: btnCancle
             width: 100
             height: 50
             text: "取消"
             clr_font: "#498ff8"
             clr_backNormal: "#ffffff"
             clr_backPress: "#DEE4ED"
             clr_boardNormal: "#498ff8"
             clr_boardPress: "#498ff8"

         }

         MyButton{
             id: btnOk
             width: 100
             height: 50
             text: "确定"
         }

         ThreeIconButton {
             width: 150
             height: 60
             text: "OK"
         }

         MyIconButton {
             id: btn_camera
             img_src: "qrc:/image/camera.png";
             btn_txt: "相机"
             onClickedLeft: console.log(btn_txt + " Left button click")
         }

         MyIconButton {
             id: btn_video
             img_src: "qrc:/image/dianshiju.png";
             btn_txt: "视频"
             onClickedLeft: console.log(btn_txt + " Left Button click")
         }

         MyIconButton {
             id: btn_audio
             img_src: "qrc:/image/music.png";
             btn_txt: "音乐"
             onClickedLeft: console.log(btn_txt + " Left Button click")
         }
    }
}

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

QML入门教程(6):单选按钮RadioButton用法自定义
琅嬛福地
05-03 7689
一RadioButton的简单用法 QML的单选按钮是RadioButton,例如下面的界面 实现代码如下: RadioButton { id:rb1 checked: true text: qsTr("First") } RadioButton { id:rb2 text: qsTr("Second") } RadioButton { id:rb...
Qt个性按钮
12-28
Qt个性按钮。 动态Led效果的按钮
qt 自定义button
12-25
qt 自定义按钮,重写qpushbutton按钮;支持同时合图加载图标按钮
Qt实现自定义控件
最新发布
qq_73185160的博客
08-18 356
在外部调用接口,将设置的动态属性名称传进去,这样自定义控件的实现就完成了。还要自定义一个类,这里先列举自定义按钮的实现方式。首先实现自定义控件必然需要。(通过类提升),名称为。下面是设置的是类型为。
Qt button
RDC01的博客
05-06 310
在这里插入代码#include "text_1.h" #include <qvariant.h> #include <QDebug> #include<qbuttongroup.h> text_1::text_1(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); btnGroup =...
qt控件----button
deroy
08-02 1830
示例程序截图: QPushButton pushButtonQt中最常用按钮,主要使用的函数为以下几个 SetText //设置文字 SetMenu //设置菜单 Clicked //点击信号 QPushButton继承关系 UI拖拽一个pushbutton到界面上 UI实现 public: QPushButton *pushButton; //初始化UI void setupUi(QWidget *Widget) { if (Widget->objectName().
Qt 控件按钮
热门推荐
安迪西_嵌入式攻城狮
02-24 1万+
Qt 控件按钮
QT 自定义 button按钮
07-13
"QT 自定义 button按钮"这个主题,主要涉及的是如何利用QT框架提供的功能,对标准的QPushButton或者更通用的QML Button进行定制,以实现独特的视觉效果,如改变按钮的背景颜色、边框颜色,以及响应用户按下时的状态...
qml控件自定义图标按钮
04-21
QML文件中,我们需要导入必要的模块,例如`QtQuick.Controls`,以便使用现有的按钮样式和行为。导入语句可能如下: ```qml import QtQuick 2.7 import QtQuick.Controls 1.4 ``` 4. **定义自定义组件**: ...
Qt Quick Templates 2:自定义控件
# 一、简介 ## 1.1 Qt Quick Templates 2 概述 ...在本节中,我们将介绍如何基于Qt Quick Templates 2 创建自定义控件的基本步骤和方法,以及如何进行Qt Quick控件的继承与扩展。 ### 3.1 创建自定义
Qt控件美化
allen5200的专栏
02-23 5457
<br />级联样式表 (CSS) 包含应用于网页中的元素的样式规则。CSS 样式定义元素的显示方式以及元素在页中的放置位置。可以创建一个通用规则,只要 Web 浏览器遇到一个元素实例,或遇到一个分配给某个特定样式类的元素,该规则就立刻应用属性,而不是将属性逐个分配给页中的每个元素。  CSS 样式可以通过内联方式放置在单个 HTML 元素内,也可以在网页 head 部分的 style 块内加以分组,或从单独的样式表中导入。如果样式是在单独的样式表中创建的,则可以将多个网页链接
Qt教程 — 3.1 深入了解Qt 控件Buttons按钮
几度春风里的博客
03-14 4274
Qt框架中,Buttons控件是用户界面编程中经常使用的一类控件,用于接收用户的点击事件,触发相应的操作。Qt提供了多种按钮控件,以满足不同的使用场景需求。是最常用按钮控件,可用于触发一个命令或者操作。它可以显示文本、图标或者两者结合。还可以设置为可选中(像切换按钮那样)。代表单选按钮,通常用于一组选项中选择一个选项的场景。单选按钮之间是互斥的,即在同一组内,选中一个单选按钮将会自动取消选中其他单选按钮。QCheckBox是复选框控件,用于表示选项的开/关状态。与。
QT button初识
moonlightpeng的博客
11-21 284
qt
Qt - Button
ScrilSta的博客
12-14 443
QPushButton myButton; 创建一个按钮。 变量名:myButton   属性: text:  按钮上的文本 icon:按钮上的图标 parent:按钮所在窗口的地址                0/NULL表示自己独成一窗   构造函数: (parent) (text,parent) (icon,text,parent) Parent默认为0。
Qt5-button控件-详细讲解
Luciano1216的博客
03-29 4475
Qt Creater提供6种Button控件。如下图:
Qt -- button的使用
daa20的专栏
10-06 622
创建一个button部件,作为主窗口,点击该button退出窗体; quit.cpp //使用按键作为主窗口,带有退出功能 #include #include int main(int argc,char *argv[]) { QApplication app(argc,argv); //创建QAppli
自定义Qt Quick控件
sunxiaoyan的博客
02-28 549
自定义Qt Quick控件 qml界面都是由层级元素(树形结构)组成,为了让外观好看一些,就不想用系统默认的样式,这时你可以用自定义QML去替换系统默认的QML。 定制一个控件按钮为例。 第一种方法:直接在代码中创建,比如你对默认的按钮圆角不满意,为了使按钮看起来圆润一些,那么就需要对background项重写,设置Rectangle里的圆角属性 import QtQuick 2.15 import QtQuick.Controls 2.15 ApplicationWindow { ..
QML学习笔记(十)-TabView-竖直方向
weixin_34199405的博客
10-22 750
源码:https://github.com/sueRimn/QML-ExampleDemos 想实现垂直竖直方向的TabView,查看文档,并没有对此的属性说明,所以跳出局限,自己做一个实例,录制软件没有录入鼠标 效果如下: 核心代码如下: Column{ id:coloumn; spacing: 0...
Qt控件美化实战:QMenu与其他展示控件
本文档主要介绍了Qt界面美化中的基础控件美化,包括各种展示控件、重要控件以及异型控件的样式调整,旨在通过CSS方式展示控件的可美化内容和细节。 在Qt开发中,UI界面的美观性是提升用户体验的关键因素之一。通过...
写文章

热门文章

  • 流媒体服务器之 ZLMediaKit介绍 22856
  • 使用VLC轻松体验本地视频推流、拉流、播放功能 22337
  • FFmpeg 代码实现流媒体推流(RTSP) 17054
  • 三种方法使用FFmpeg截取视频片断 16118
  • flv.js解析与使用 15380

分类专栏

  • Qt开发 642篇
  • C++Linux后端 179篇
  • 音视频开发进阶 721篇

最新评论

  • 使用VLC轻松体验本地视频推流、拉流、播放功能

    GtoStudy: 失败的 要在另一个窗口中去点击播放才有用

  • WebRTC + WebSocket 实现视频通话

    ClearLoveQ: 在发起视频通话,点接受时,接收方的会报错这个;Failed to execute 'addIceCandidate' on 'RTCPeerConnection'

  • C++后端开发技能全解析,打造完美学习路线!

    程序员老舅: 更详细的学习路线导图,可以来文章底部拿

  • Qt使用QAudioInput、QAudioOutput实现局域网的音频通话

    程序员老舅: 可以,来文章底部拿

  • QT5基础教程(介绍,下载,安装,第一个QT程序)

    程序员老舅: 来文章底部拿,有网盘下载

大家在看

  • java毕业设计下载(全套源码+配套论文)——基于javaEE+SSH+mysql的医院在线挂号系统设计与实现
  • hCaptcha 图像识别 API 对接说明
  • 828华为云征文|华为云Flexus X实例下的场景体验——小企业使用Python语言——超迅速搭建简单公网API接口服务
  • java毕业设计下载(全套源码+配套论文)——基于javaEE+SSH+mysql的百货中心供应链管理系统设计与实现
  • 【Proteus仿真】基于51单片机的电机调速和速度实时显示 1140

最新文章

  • 推荐几个高质量C/C++项目,全程干货没有废话!
  • C++11 新特性面试题
  • 详解哈希表的查找
2024
09月 5篇
08月 6篇
07月 5篇
06月 10篇
05月 6篇
04月 11篇
03月 24篇
02月 9篇
01月 17篇
2023年566篇
2022年841篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家亳州玻璃钢雕塑定做价格焦作附近玻璃钢人物雕塑价格雕塑玻璃钢雕塑定制宁波环保玻璃钢雕塑订做价格濮阳室内不锈钢玻璃钢卡通雕塑商场美陈布搭配地贴浙江艺术商场美陈厂家直销廊坊玻璃钢农耕人物雕塑华阴玻璃钢卡通座椅雕塑江西玻璃钢雕塑工程公司黄山玻璃钢卡通雕塑定制方型玻璃钢花盆专卖浙江传统玻璃钢佛像雕塑浙江季节性商场美陈市场惠州玻璃钢景观雕塑电话徐州玻璃钢雕塑制作安徽水果玻璃钢雕塑销售厂家浙江商场主题创意商业美陈传播郑州不锈钢景观玻璃钢雕塑厂菏泽不锈钢水景玻璃钢卡通雕塑陕西水果玻璃钢雕塑优势玻璃钢m豆卡通雕塑商丘玻璃钢人物雕塑设计鼎城玻璃钢造型雕塑德州校园玻璃钢雕塑报价翔安玻璃钢雕塑厂家惠济区玻璃钢大型雕塑特色商场美陈报价新中式商场美陈无棣玻璃钢造型雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化