QT 实现点击按钮组,按钮的背景图片切换且唯一
时间: 2023-06-20 16:07:52 浏览: 236
实现这个功能,可以使用QPushButton类的setStyleSheet()函数来更改按钮的背景图片。
首先,在按钮组中的每个按钮上设置一个唯一的objectName,这样我们就可以在代码中识别它们。然后,连接每个按钮的clicked信号到同一个槽函数。在槽函数中,我们可以使用sender()函数获取哪个按钮被点击,并根据点击的按钮的objectName设置相应的背景图片。
下面是一个简单的示例代码:
```cpp
// 创建按钮组和布局
QButtonGroup *buttonGroup = new QButtonGroup(this);
QVBoxLayout *layout = new QVBoxLayout;
// 创建三个按钮,分别设置不同的 objectName 和背景图片
QPushButton *button1 = new QPushButton(this);
button1->setObjectName("button1");
button1->setStyleSheet("QPushButton#button1 {background-image: url(:/images/image1.png)}");
QPushButton *button2 = new QPushButton(this);
button2->setObjectName("button2");
button2->setStyleSheet("QPushButton#button2 {background-image: url(:/images/image2.png)}");
QPushButton *button3 = new QPushButton(this);
button3->setObjectName("button3");
button3->setStyleSheet("QPushButton#button3 {background-image: url(:/images/image3.png)}");
// 将按钮添加到按钮组和布局中
buttonGroup->addButton(button1);
buttonGroup->addButton(button2);
buttonGroup->addButton(button3);
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
// 连接按钮的clicked信号到槽函数
connect(buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), this, &MyWidget::onButtonClicked);
// 槽函数实现
void MyWidget::onButtonClicked(QAbstractButton *button)
{
// 获取被点击按钮的 objectName
QString objectName = button->objectName();
// 根据 objectName 设置相应的背景图片
if (objectName == "button1") {
button->setStyleSheet("QPushButton#button1 {background-image: url(:/images/image1_selected.png)}");
} else if (objectName == "button2") {
button->setStyleSheet("QPushButton#button2 {background-image: url(:/images/image2_selected.png)}");
} else if (objectName == "button3") {
button->setStyleSheet("QPushButton#button3 {background-image: url(:/images/image3_selected.png)}");
}
}
```
在这个示例中,我们创建了一个包含三个按钮的按钮组,并将它们添加到一个垂直布局中。每个按钮都有一个唯一的objectName,并设置了不同的背景图片。当一个按钮被点击时,它的clicked信号会被发送,并且会调用槽函数onButtonClicked()。在该函数中,我们使用sender()函数获取被点击的按钮,并根据它的objectName设置相应的背景图片。注意,在设置样式表时,我们使用了#符号来指定特定的按钮。例如,QPushButton#button1表示具有objectName为“button1”的QPushButton。
阅读全文