1.QPushButton 我们想处理保持按下 和 处于松开状态下的两种
保持按下:
和再点击一次的效果:
setCheckable()是否保持按下状态
isCheckable() 获取是否被设置为 true 或者 false
setChecked() 设置是否被选择
isChecked() 只有按钮被 setCheckable(true)时 ,以后才能获取到true,要不为false
代码:
void WidgetThree::on_btn5_clicked()
{
//当被选中时
if (ui.btn5->isChecked() == true)
{
QMessageBox::information(nullptr, "123", "5555");
}
else
{
QMessageBox::information(nullptr, "123", "1111-1155555");
}
//当保持按下状态时
if (ui.btn5->isCheckable() == true)
{
QMessageBox::information(nullptr, "123", "222222");
}
else
{
QMessageBox::information(nullptr, "123", "222-33333");
}
//发现这个是没有效果的 不管怎么样都是false 状态
if (ui.btn5->isDown() == true)
{
QMessageBox::information(nullptr, "123", "down");
}
else
{
QMessageBox::information(nullptr, "123", "no dwon");
}
}
2.我们想测试一下 获取按下状态 isDown()
isDown() 表示按钮button是否 是pressed信号下 (其他信号按下的没用 如 clicked()信号下) down按下的
setDown() 设置按下状态
pressed()信号,当鼠标在button上并点击左键的时候发射(鼠标 不松开 ,如果鼠标松开 会触发clicked信号)
代码:
void WidgetThree::on_btn_pressed()
{
if (ui.btn->isDown() == true)
{
QMessageBox::information(nullptr, "123", "down");
}
else
{
QMessageBox::information(nullptr, "123", "no dwon");
}
}
3.我们设置一组按钮互斥
setAutoExclusive() 设置是否互斥 ,必须大于两个按钮
效果:
4个按钮,必须有一个为被选中且高亮,样式表如下:
QPushButton{
border:1 solid gray;
background-color: rgb(229, 229, 229);
}
QPushButton:hover{
border:1 solid #00aaff;
background-color: #dcfdfc;
}
QPushButton:checked,
QPushButton:pressed{
border:1 solid #0b95ff;
background-color:#bcebff;
}
4.我们想要设置一组按钮 最多一个按钮(0 或者 1)能被选中 而且,这几个功能都互斥, 在被点击的和不被点击时 执行不同的功能
这是我们使用AutoExclusive() 就是不可以的 ,因为必须有一个按钮为被选中 ,但是我们想的是 0 或者 1个按钮 被选中 而且 这所有的按钮互斥,我们需要将AutoExclusive(false)
void WidgetThree::setBtnDownStatus(QPushButton* btn, QObject* obj)
{
if (nullptr == obj)
return;
QList<QPushButton*> listButtons = obj->findChildren<QPushButton*>();
for (auto& curBtn : listButtons)
{
if (btn == nullptr)
curBtn->setChecked(false);
else //当前按钮
{
if (curBtn->objectName() == btn->objectName())
curBtn->setChecked(true);
else
curBtn->setChecked(false);
}
}
}
void WidgetThree::on_btn1_clicked()
{
if (ui.btn1->isChecked())
{
//执行某个功能
QMessageBox::information(nullptr, "123", "111 true");
setBtnDownStatus(ui.btn1, ui.widget);
}
else
{
QMessageBox::information(nullptr, "123", "111 false");
}
}
void WidgetThree::on_btn2_clicked()
{
if (ui.btn2->isChecked())
{
//执行某个功能
QMessageBox::information(nullptr, "123", "222 true");
setBtnDownStatus(ui.btn2, ui.widget);
}
else
{
QMessageBox::information(nullptr, "123", "222 false");
}
}
void WidgetThree::on_btn3_clicked()
{
if (ui.btn3->isChecked())
{
//执行某个功能
QMessageBox::information(nullptr, "123", "333 true");
setBtnDownStatus(ui.btn3, ui.widget);
}
else
{
QMessageBox::information(nullptr, "123", "333 false");
}
}
void WidgetThree::on_btn4_clicked()
{
if (ui.btn4->isChecked())
{
//执行某个功能
QMessageBox::information(nullptr, "123", "444 true");
setBtnDownStatus(ui.btn4, ui.widget);
}
else
{
QMessageBox::information(nullptr, "123", "444 false");
}
}
效果图: