QPushButton控件提供一个控制按钮。
在任何图形用户界面中,按钮或者说控制按钮也许是最常用的控件。按按钮图控制第难熬实现一些动作或者询问一个问题。典型的按钮像OK, Apply, Cancel, Close, Yes, No and Help。
一个控制按钮是矩形的,并且通常显示一个文本来描述它的动作。可以在文本中首字符前使用'&'与来指定快捷键。例如:
QPushButton *button = new QPushButton("&Download", this);
在这个例子中快捷键是“Alt+D”,详情可查看QShortcut文档(想要显示’&‘,可以使用‘&&’)。
按钮显示文本和随便的小图标。这些可以在使用构造函数时设置,也可以在之后使用setText和setIcon修改。如果按钮不使能,文本和图标的外观将遵守GUI的样式去修改,让其变得像不使能。
当按钮被鼠标、空格键、键盘快捷键激活时将发送信号clicked().可以连接这个信号去实现按钮的动作。按钮也提供不常用的信号,像pressed和released。
对话框中的控制按钮默认是自动默认按钮,i.e.当收到键盘输入聚集时,他们自动成为默认的按钮。默认按钮是指当对话框中用户按Enter和Return键时会被激活的按钮。你可以通过setAutoDefault去修改。注意默认按钮必须留出一些额外的空白区来显示默认按钮指示器。如果你不想你的按钮周围有空白,可以调用setAutoDefault(false)。
为了成为核型,按钮控件已经成长了很多以适应过去十年的众多变化。微软样式表现在可以显示10种不同的windows按钮样式,而且对于文本如果将所有的特征组合都考虑的话,样式可以达到几十种之多。
最重要的模式或状态:
通常来说,当应用或对话窗口实现一个动作在用户点击按钮(两Apply,Cancl,Close和Help)和窗口需要一个宽的矩形文本标签是使用按钮。小部分的,通常对于方形按钮去改变窗口的状态而不是实现动作的话,是工具按钮而不是控制按钮。对于这些按钮,Qt提供指定的类(QToolButton)
如果你需要切换功能(见setCheckable)或者当按钮按住时自动重复激活信号,像滚动条里的箭头(见setAutoRepeat()),控制按钮可能不是你想要的。当怀疑的时候,使用toolButton。
注意:
在macOS系统中,当按钮的宽度小于50或者高度小于30,按钮的角将从圆弧变为方形。使用setMinimumSize函数来避免这种现象
控制按钮的一个变化是菜单按钮。这提供了不仅仅是一个控制而是几个,当它们被点击时他们弹出一个可选择的菜单。设置方法setMenu()来关联一个弹出菜单和按钮。
其他按钮类是选择按钮(见QRadioButton)和勾选按钮(QCheckBox)。
在Qt中,QAbstractButton基类提供最多的方法和其他接口,QPushButton提供GUI逻辑。查看QAbstractButton获取更多关于API的信息。
autoDefault:bool
这个属性决定按钮是否是一个自动默认按钮。
如果这个属性被设置为true则按钮是一个自动默认按钮。
在一些GUI样式中默认按钮会有一个额外的边框在按钮周围,这个边框有3个像素甚至更粗。Qt自动保持这个空白包围在自动默认按钮,也就是说自动默认按钮可能有一个稍微大一点的提示。
对于父对象是QDialog类的按钮,这个属性的默认值为true,其他情况为false。
查看default属性了解default和autoDefault属性如何相互作用的。
default:bool
这个属性决定按钮是否是一个默认按钮。
默认和自动默认按钮决定当用户在对话框中按Enter的时候将会发生什么。
一个按钮的default属性被设置为true(即对话框的默认按钮),那么这个按钮将在用户按下Enter时被触发按下,有个例外:如果一个autoDefault按钮这时有焦点,则这个autoDefault按钮被按下。
当对话框有autoDfault按钮而没有default按钮时,按下Enter将出发当前有焦点的autoDefault按钮,或者如果没有按钮有焦点,则在焦点链中下一个autoDefault按钮被按下。
在对话框中,在同一时刻只能有一个按钮是default按钮。这个按钮当时会显示一个额外的框(依赖于GUI样式)。
default按钮行为仅仅存在于对话框中。在按钮按钮拥有焦点时,总能被键盘的空白键触发。
如果当前默认按钮的default属性被设置为false,而对话框可见,则在下一次对话框中的按钮得到焦点时一个新的default将自动被分配
这个属性默认值为false。
flat : bool
这个属性决定按钮边框是否突起。
这个属性默认值是false。如果这个属性被设置,大多数的样式将不绘画按钮背景,除非按钮被按下。setAutoFillBackground可以被用来确保背景被QPalette:Button刷填充。
QPushButton::QPushButton(QWidget *parent = Q_NULLPTR)
构造一个只有父对象没有文本的按钮
QPushButton::QPushButton(const QString &text, QWidget *parent = Q_NULLPTR)
构造一个有父对象和文本的按钮
QPushButton::QPushButton(const QIcon &icon, const QString &text, QWidget *parent = Q_NULLPTR)
构造一个有图标、父对象和文本的按钮
注意:你也可以用一个QPixmap类作为图标(感谢C++提供的冲突类型转换)
需要清楚重新构建,不设置icon的size则为默认的20高,设置icon大小就是按钮的大小。此外默认图片在左边无法修改,可以使用toolbutton样式更多。
QPushButton::~QPushButton()
销毁按钮
[protected] void QPushButton::initStyleOption(QStyleOptionButton *option) const
用QPushButton的值初始化option。这个方法对于那些需要QStyleOptionButton,但是又不想自己填充所有信息的子类是有用的。
QMenu *QPushButton::menu() const
返回按钮相关的弹出菜单,当没有弹出菜单时设置为0.
void QPushButton::setMenu(QMenu *menu)
将菜单menu和这个按钮关联。将按钮转为一个菜单按钮,而在一些样式中这将在按钮文本右侧产生一个小三角形
菜单的所有权不会转移到按钮。
[slot] void QPushButton::showMenu()
槽函数。显示(弹出)相关的菜单。如果按钮没有菜单,那这个函数不起作用。这个函数知道用户关闭下拉菜单才会返回。
主要在自定义按钮中重载这个函数,并实现一些操作。