QT Buttons

QAbstractButton是按钮部件的抽象基类,提供基础功能如设置文本、图标、状态等。通过继承可创建不同类型的按钮,如QPushButton、QToolButton、QCheckBox和QRadioButton。QButtonGroup用于管理一组按钮,实现互斥选择。信号槽机制用于响应按钮事件。
摘要由CSDN通过智能技术生成

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值