QT Buttons

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

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)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值