文章目录
一.PushButton 基础
PushButton介绍
头文件:#include<QPushButton>
qmake:QT+=widgets
继承于:QAbstractButton(所有按钮的抽象基类)
继承给:QCommandLinkButton(支持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添加菜单。
自定义按钮
暂无