QPushButton类提供了一个命令的按钮.它可以说是图形界面中最常用的控件之一了.点击按钮来执行一些计算机的命令,或者回答一些问题.常用的按钮有:OK, Apply, Cancel, Close, Yes, No and Help等.按钮通常是矩形的,在按钮上通过文本来显示描述它的动作作用.可以在按钮的文本中使用’&’来给该按钮设置快捷键.比如:
//快捷键为alt+d.
QPushButton *button = new QPushButton("&Download", this);
按钮上可以显示一个文本标签,也可以设置一个图标.这些可以通过构造函数来设置,也可以随时调用setText()和setIcon()进行设置.
如果按钮是禁用的,也就是未被激活的,则文本和图标的外观默认呈现的是灰色的,看起来就好像是禁用的.
当鼠标点击按钮,快捷键按下按钮时,按钮会发出clicked()信号.我们需要让执行的动作与这个信号连接起来.按钮类也提供了pressed()和released()等较少使用的方法,常用的是clicked()方法,当手动调用后相当于发出信号被的操作.也就是emit操作.
常用的模式情况:
Available or not (grayed out, disabled).//禁用的.
Standard push button, toggling push button or menu button.标准按钮,按下和菜单按钮.
On or off (only for toggling push buttons).//切换开关.
Default or normal. The default button in a dialog can generally be "clicked" using the Enter or Return key.//正常还是默认.默认情况则可以直接被空格或Enter回车键触发.
Auto-repeat or not.//是否可以重复触发.
Pressed down or not.//是否按下.
通常来说,如果是正方形的按钮,且是为了修改一些状态(如QFileDialog右上角的按钮等)使用的都是QToolButton工具按钮.Qt为按钮类提供了一个特殊的QToolButton按钮类.
如果你想要按钮能够支持按下和弹起操作,可以使用setCheckable()方法来进行设置.或者希望通过鼠标一直按下,重复激活信号,可以调用setAutoRepeat()方法.但是QPushButton可能不是最好的选择,最好还是使用QToolButton类.
菜单按钮也是QPushButton按钮的一个变体.它不单单只提供了一种命令动作,而是好多个,当它被点击的时候会弹出一个菜单,我们可以通过调用setMenu()方法来设置弹出的菜单.
除此之外的按钮类常用选择控件还有QCheckButton和QRadioButton等.
1.1
:在QDialog中,autoDefault属性决定了按下Enter能否产生反应,而default属性决定了按下空格键能否产生反应.但有时设置了default的按钮也能相应Enter.而在QWidget和主窗体中不必纠结default和autoDefault属性.
bool autoDefault() const
void setAutoDefault(bool)
bool isDefault() const
void setDefault(bool)
1.2
该属性控制按钮是否不需要默认显示边框.默认是false的,表示一直显示边框…如果它被设置为true.则该按钮是不会显示四周的边框的,除非你按下它才显示.表象和QLabel类似,当你按下时才会显示边框~
bool isFlat() const
void setFlat(bool)
1.3:
作为菜单按钮来使用,当点击的时候显示菜单.一般来说,会在按钮名或者图标旁边出现一个小三角来表示这是一个菜单按钮.并且菜单的所有权没有转移到按钮上.
QMenu * menu() const
void QPushButton::setMenu(QMenu * menu)
QPushButton *button = new QPushButton(this);
button->move(100,100);
button->setText("Language");
button->adjustSize();
//创建菜单.
QMenu *menu = new QMenu();
QAction *action1 = new QAction("C++",this);
QAction *action2 = new QAction("Java", this);
QAction *action3 = new QAction("Python", this);
menu->addAction(action1);
menu->addAction(action2);
menu->addAction(action3);
设置按钮为菜单按钮.
button->setMenu(menu);
signals:
//按钮被点击发出信号.
void clicked(bool checked = false)
2.
//按钮被按下发出信号.
void pressed()
3.
//按钮被释放出信号.
void released()
4.
//按钮被按下或者释放都发出信号.
void toggled(bool checked)
slots: