如何在Qt中以编程方式更改按钮样式表?

时间:2019-01-01 00:01:55

标签: c++ qt qt5 qtstylesheets qpushbutton

我在对话框上有很多按钮,我想在某些情况下更改样式表。 按钮对象名称如下:
btn_1
btn_2
btn_3
..
btn_20


当我单击这些数字按钮之一,然后又单击另一个简单按钮时,我想更改首次单击的数字按钮样式表。如何访问所选的数字按钮?

编辑: 我的意思是图片
buttons


我正在尝试使用右列按钮设置左列按钮(具有按数字顺序排列的对象名称)的颜色。将首先单击用户的数字按钮,然后单击命名按钮的颜色。

2 个答案:

答案 0 :(得分:1)

您必须使用setStyleSheet方法,但必须保持按下按钮的引用,这可以使用sender方法来完成,该方法可以返回发出信号的对象。

#include <QtWidgets>

class MainWindow: public QMainWindow{
    Q_OBJECT
public:
    MainWindow(QWidget *parent=nullptr):
        QMainWindow(parent),
        current_button(nullptr)
    {
        QWidget *widget = new QWidget;
        setCentralWidget(widget);
        QHBoxLayout *hlay = new QHBoxLayout(widget);
        QVBoxLayout *number_lay = new QVBoxLayout;
        QVBoxLayout *color_lay = new QVBoxLayout;
        hlay->addLayout(number_lay);
        hlay->addLayout(color_lay);

        for(int i=0; i<20; i++){
            QPushButton *button = new QPushButton(QString("btn_%1").arg(i+1));
            connect(button, &QPushButton::clicked, this, &MainWindow::number_clicked);
            number_lay->addWidget(button);
        }
        color_lay->addStretch();
        for(const QString & colorname: {"Red", "Green", "Blue"}){
            QPushButton *button = new QPushButton(colorname);
            connect(button, &QPushButton::clicked, this, &MainWindow::color_clicked);
            color_lay->addWidget(button);
            button->setProperty("color", colorname.toLower());
            button->setStyleSheet(QString("background-color: %1").arg(colorname));
        }
        color_lay->addStretch();
    }
private slots:
    void number_clicked(){
        current_button = qobject_cast<QPushButton *>(sender());
    }
    void color_clicked(){
        if(current_button){
            QString colorname = sender()->property("color").toString();
            current_button->setStyleSheet(QString("background-color: %1").arg(colorname));
        }
    }
private:
    QPushButton *current_button;
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
#include "main.moc"

enter image description here

答案 1 :(得分:0)

单击第一个按钮时,使用方法objectName()获取其名称,然后在需要更改样式时,只需在方法中指定

setStyleSheet(QString(QPushButton#) + button->objectName() + QString("{ ... }");

我可以编写示例程序,但我不完全了解您想要的内容