Как программно изменить таблицу стилей кнопок в Qt? - PullRequest
0 голосов
/ 01 января 2019

У меня так много кнопок в диалоге, и я хочу изменить их таблицы стилей при определенных условиях.Названия объектов кнопки как ниже:btn_1btn_2btn_3..btn_20

Когда я нажал одну из этих числовых кнопок, а затем и другую простую кнопку, я хочу изменить таблицу стилей числовой кнопки, которая была нажата первой.Как я могу получить доступ к выбранной цифровой кнопке?

Редактировать: Что я имею в виду под картинкойbuttons

Я пытаюсь установить цвета кнопок левого столбца (имеет нумерованные имена объектов) с кнопками правого столбца.Сначала пользователь будет нажимать цифровые кнопки, а затем кнопки с цветными именами.

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Вы должны использовать метод setStyleSheet, но вы должны удерживать ссылку нажатой, и это можно сделать с помощью метода отправителя, который возвращает объект, испустивший сигнал.

#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

0 голосов
/ 01 января 2019

Когда вы нажимаете на первую кнопку, получаете ее имя по методу objectName(), затем, когда вам нужно изменить стиль, просто укажите в методе

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

Я могу написать пример программы, но я не до конца понимаю, что вы хотите

...