QT系统学习系列:1.2 PushButton(常规按钮)


一.PushButton 基础

PushButton介绍

头文件:#include<QPushButton>

qmake:QT+=widgets

继承于:QAbstractButton(所有按钮的抽象基类)

继承给:QCommandLinkBut​​ton(支持2行文字显示、缺省带箭头图标,内部功能与PushButton类似的按钮)

PushButton按钮样式如图:
在这里插入图片描述
可以在Qt Designer(ui界面) 中直接拖动生成控件,或者使用代码生成:

QPushButton * btn = new QPushBuuton("PushBuuton",this);

给PushButton添加快捷键

如果我们想为按钮添加快捷键,只需要在按钮名字前面加&即可,这样,alt+p将作为该按钮的快捷键。

QPushButton * btn = new QPushBuuton("&PushBuuton",this);

PushButton构造函数

QPushBuuton有三种构造函数,它们分别是:

指定一个父类

QPushButton(QWidget *parent = nullptr)

指定一个文本,一个父类

QPushButton(const QString &text, QWidget *parent = nullptr)

指定一个图标,一个文本,一个父类

QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)

如图,你可以生成如下三种样式的按钮:
在这里插入图片描述

如何设置图标大小呢,使用该函数即可:

setIconSize(const QSize &size);

对应的查看该图标的大小,可使用该函数:

IconSize();

PushButton添加/更改(图标,文本,父类)

如上图所示,可以根据自己的寻求进行选择对应的构造函数,相应的,也可以在ui界面对按钮进行图标,文字,父类的指定。
例如图标在此添加(点击按钮,右下角属性)。
在这里插入图片描述
而有无文本,只需要双击按钮就可以设置。

那么如果想在程序运行过程中改变属性呢,我们可以利用下面三个函数,分别设置父类,图标,和文本。

setParent();
setIcon();
setText();

PushButton控件大小,位置

ui界面直接拖进来的按钮可以可以在ui界面自行改变大小,位置。

代码默认生成的按钮在窗口左上角初始位置,且大小默认,如何通过代码指定大小,位置呢。

QWidget提供了成员函数用来设置窗口组件的位置大小信息,这其中包括PushBuuton。

下面两个函数用于设置窗口宽度、高度(用户区的宽度和高度)

void resize(int w, int h)
void resize(const QSize&)

下面两个函数用于设置按钮坐标位置(从窗口左上角的移动宽度和高度)

void move(int w, int h)
void move(const QPoint&)

PushButton 槽——信号响应

两种情况,第一种在ui界面创建的按钮,可直接右击按钮,选择转到槽,选择对应的信号数,即可自动生成相应的槽函数。
在这里插入图片描述
若是第二种,使用代码创建的按钮,我们就需要自己写槽函数。

例如,现在有一个按钮叫btn。
在头文件(类中添加)中声明槽函数:

private slots: //表示槽函数
    void on_btn_clicked();

在对应cpp文件中对该槽函数进行业务逻辑的编写(可直接右击声明的槽函数,选择Refactor,在XXXXXX.cpp添加定义)。
在这里插入图片描述
然后进行信号和槽函数的绑定:

connect(ui->btn,SIGNAL(clicked(bool)),this,SLOT(on_btn_clicked()));

第一种方式添加槽函数,会自动绑定,只不过connect的内容不会在cpp文件中生成。

一般情况下,我们只需要用到QAbstractButton列表的几个信号:

信号描述
clicked当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号
clicked(bool)]当按钮被第一次按下然后释放时发出信号,并将当前状态传递给外界
pressed当鼠标指针在按钮上并按下左键时触发该信号
released当鼠标左键被释放时触发该信号
toggled(bool)按钮的状态发生变化时发出信号,并将当前状态传递给外界

二.PushButton 进阶

PushButton 设置可选/不可选

ui界面没有该属性,可通过代码进行操作,true表示可选,false表示不可选,默认可选。

setEnabled(bool);

当参数为false是,按钮将是灰色的。
在这里插入图片描述


flat属性

在这里插入图片描述

该属性用于确认按钮边框是否凸起,如果为False则凸起,如果为True则边框与背景是平坦的。
当将默认按钮的flat属性设置为True时,将看不到其按钮突起,效果如下:
在这里插入图片描述
该属性常用于扁平化设计,默认按钮表现不是很突出,使用样式表美化后,效果绝佳。
在这里插入图片描述


default属性

该属性确认按钮是否为默认按钮,它的默认值是false,如果按钮被设置为默认按钮,当按下回车键(“Enter”键)时,此属性设置为True的按钮(即对话框的默认按钮)将自动被按下(执行此按键的clicked()事件)。

注:该属性在父窗口为对话框时,生效,其他窗口设置该属性无意义。

ui界面设置:
在这里插入图片描述
代码可以通过下面isDefault()和setDefault(bool)访问和设置按钮的default属性。


autodefault属性

该属性确认按钮是否为自动默认按钮,如果此属性设置为True,则按钮是自动默认按钮,在某些图形用户界面样式中,默认按钮的周围有一个额外的边框,最多3个像素或更多。

注:该属性在父窗口为对话框时,生效,其他窗口设置该属性无意义。

ui界面设置:
在这里插入图片描述

代码可以通过autoDefault() 、setAutoDefault(bool)来访问或设置按钮的atuoDefault属性。


autodefault属性效果演示

上面提到过无论是default和autodefault属性,在父窗口为对话框时,生效,其他窗口设置该属性无意义。
下面我们一起来看一下(QT提供了一些现成的消息对话框,但是现在我们还不需要),我们右击项目,创建一个空对话框的类:
在这里插入图片描述
在这里插入图片描述
在对话框类的 ui界面,我们拖入两个按钮,如果你细心的话可以看到它们的autodefault属性默认被选中,而在我们主窗口创建的按钮默认不被选中。
在这里插入图片描述
然后,我们在mian.cpp中显示这个对话框

    Dialog w;
    w.show();

在这里插入图片描述
当我们把两个按钮的autodefault属性都取消,效果如下:
在这里插入图片描述


继承属性

在这里插入图片描述

该类继承于QAbstractButton类的属性,在QT系统学习系列:1.1 QAbstractButton(所有按钮的抽象基类,学习按钮之前必看该篇)已经列出,有需要,可点击学习。


关于PushButton 按钮的简单美化

ui界面,我们可以右击按钮,选中改变样式表,关于按钮,常用的包括:

border-image 自动适应图片
color 字体颜色
background-color 背景颜色
border-color 边框色

现在,我们先来为按钮添加一个背景色:

在这里插入图片描述
当我们点击ok时,发现我们的按钮并没有显示出我们想要的颜色,这是为什么呢?
我们可以在Qt的官方文档找到答案,有兴趣,请点击我。
在这里插入图片描述

翻译过来就是:警告:如果仅在QPushButton上设置背景色,除非将border属性设置为某个值,否则背景可能不会出现。这是因为,默认情况下,QPushButton绘制一个原生边框,该边框与背景颜色完全重叠。

我们现在给按钮一个border值(按钮边框宽度)。
在这里插入图片描述
当我们点击Apply,按钮变成我们想要的样子。

设置按钮边框宽度不显示,是因为我们没有设置边框风格,默认的边框风格为none,我们将边框风格设置为slied(实线),便可以看到一条黑色的边线。
在这里插入图片描述

如果想把矩形按钮设计成有圆角的怎么办呢?
使用border-radius:10px;
在这里插入图片描述
值越大,角越圆!

关于按钮的简单美化就写到这里,其中还有一些内容并未列出,例如鼠标滑过如何,点击如何,因为关于样式表,本身就够写好几篇,在这之前,大家可以如果想初步了解,可以看一看这篇初学Qt不会样式表怎么办,打包好的Qt样式表一键生成送给你。,这篇文章将会带您初步了解Qt的样式表,并且为大家制作了一个简单的样式表一键生成,辅助学习。


三.PushButton 高级

PushButton 菜单

PushButton按钮添加菜单与ToolButton,大致一样,可参考:QT系统学习系列:1.3 ToolButton(工具按钮)中的ToolButton添加菜单。

自定义按钮

暂无


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花狗Fdog

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值