QAbstractButton
QAbstractButton类是按钮部件的抽象基类,提供了按钮所共有的功能。
QAbstractButton类实现了一个抽象按钮,可以通过继承它来实现不同的button对象。
按钮其实就是显示一个包含文本和图标的标签,以及click时的处理。
因为一般不直接使用此类,所以此处只是一个函数功能的参考
//状态
but->isDown();//按钮是否被按下
but->isChecked();//按钮是否被check
but->setAutoRepeat();//按钮是否自动重复(一直按着时自动重复)
but->setToggleButton();//是否是一个checkButton
but->setAutoExclusive();//设置互斥,在同一父窗口下只能有一个被选中
but->setIcon();//设置图标
but->setText();//设置文本
but->setAutoRepeatDelay(ms);//按下多久才开始自动重复
but->setAutoRepeatInterval(ms);//重复的时间间隔
but->setCheckable();//设置能否check(选中/未选中)
信号槽
/*当按钮被激活(鼠标按下然后释放)、键入快捷键或调用click()或animateClick()时,会发出此信号
如果调用 setDown()、setChecked() 或 toggle(),则不会发出此信号
参数为button的checked属性*/
void clicked(bool checked = false)
//按下按钮时会发出此信号
void pressed()
//松开按钮时发出此信号
void released()
/*每当可切换状态按钮更改其状态时(checked改变时),就会发出此信号。
只要checked状态被改变,就会触发*/
void toggled(bool checked)
继承
通过继承抽象按钮,并重写以下函数来实现自定义(paintEvent是必须重写的)
//调用setChecked实质上就是调用此函数
void checkSateSet()
//每次鼠标点击时就会传入自己的pos,再通过此函数判断是否命中按钮
bool hitButton(const QPoint& pos)
//每次切换状态(toggle)时的行为,就是每次点击就会触发此函数
void nextCheckState()
QPushButton
基本常用方法与QAbstractButton一致,不过多演示,只列出多出的函数
but->setFlat();//是否显示按钮边框
but->setEnabled();//设置按钮是否可用
but->setAutoDefault();//若此属性为true,则在父窗口中按下回车时自动触发此按钮
//将button设置为下拉菜单式
QMenu *pMenu = new QMenu(this);
pMenu->addAction(QString::fromLocal8Bit("设置"));
pMenu->addAction(QString::fromLocal8Bit("版本检测"));
pMenu->addSeparator();
...
QPushButton *pButton = new QPushButton(this);
pButton->setText("主菜单");
pButton->setMenu(pMenu);
QToolButton
button共有方法也不赘述了,这个button就相当于一个下拉菜单,每个选项都是一个action
but->setMenu();//具体参考QPushButton
//但ToolButton不同之处在于,PushButton点击后会自动弹出下拉菜单,而tBtn必须要设置popup才能弹出
but->setPopupMode();//设置popup模式
but->setToolButtonStyle();//设置按钮图片和文字的显示格式
but->setArrowType();//设置按钮的箭头样式
but->setDefaultAction();//设置一个action为button的默认选项
but->setAutoRaise(true);//按钮透明背景,仅显示图标和文字,简约优雅
信号槽
//当tBtn中的action触发时触发此信号,参数是被触发的action,以区分被触发的对象
void triggered(QAction *action)
//此信号时tBtn本身被点击时才触发
void clicked()
QCheckBox
button共有方法也不赘述了,此but主要是复选框(多选多)
but->setCheckState();//返回/设置当前check状态,与isChecked类似,但是这个函数可返回三元状态
but->setTriState();//设置but为三元(即有三个状态可选)
state == Qt::PartiallyChecked//中间状态(其实就是一个int类型的typedef罢了)
信号槽
//当复选框状态发生改变,这个信号就会被发射
void stateChanged(int state)
//除了UI上点击,还有这些函数会触发此信号
pCheckBox->animateClick();
pCheckBox->click();
pCheckBox->toggle();
pCheckBox->setChecked(true);
pCheckBox->setCheckState(Qt::PartiallyChecked);
QRadioButton
button共有方法也不赘述了,此but主要是单选框(多选一),其本身没有互斥,要通过group或exclusive才能实现互斥
基本没有新操作,仅列出常用操作
but->setChecked();//获取/设置checked属性
信号槽也没有新的,基本就是clicked、pressed、released、toggled四个常用
QButtonGroup
//创建group并添加button进去,每个button都有其独自的编号,注意是从0开始编号
//仅在逻辑上管理,可以在UI中手动放在一个box中
QButtonGroup * group = new QButtonGroup(this);
group->addButton(ui.radioButton, 0);
group->addButton(ui.radioButton_2, 1);
group->addButton(ui.radioButton_3, 2);
group->addButton(ui.radioButton_4, 3);
group->removeButton(but5);//移除button
//设置为互斥模式,其实按钮和group本身都不互斥,只不过通过设置exclusive属性来让它们互斥
group->setExclusive(true);
group->button(1);//通过编号访问指定button
group->id(but);//通过button返回其对应的编号
group->setId(but,n);//设置指定button的编号
group->checkedButton();//当前被选中的按钮本身
group->checkedId();//当前组中被选中按钮的编号
信号槽
//每当组中任意一个按钮被按下,就会触发以下事件,参数要么是传递button对象,要么是传递id
//所以也方便了不用每个按钮都设置一遍信号槽
void buttonClicked(QAbstractButton *button)
void buttonPressed(QAbstractButton *button)
void buttonReleased(QAbstractButton *button)
void buttonToggled(QAbstractButton *button, bool checked)
void idClicked(int id)
void idPressed(int id)
void idReleased(int id)
void idToggled(int id, bool checked)