最初设置后是否有任何方法可以重置样式表

发布于 2025-01-23 21:07:03 字数 1226 浏览 3 评论 0原文

我是QT的新手。我有8个QT QPUSHBUTTON,就像此图像一样。

要求

单击任何按钮后,其边框将用黑色圆圈突出显示。 仅当单击8个新按钮中,突出显示的边框才能消失,并且在运行时,黑色圆圈应包围该新按钮。

注意:圆圈应一次单击一个按钮周围环绕。

尝试:

的Red Circle,

button1->setStyleSheet("QPushButton {background-color: rgb(200,0,0),border-radiu:15px}") ; 

我是使用此代码在QT表单类中单击插槽中

void button1clicked()
{
button1->setStyleSheet("QPushButton {border-style:solid; border-width:3px; border-color:black;}") ; 

}

如何第二次更改样式表

我已经访问过这个

通过setStyleSheet()在QT中不丢失Orignal样式?

并应用了此解决方案,但它不起作用?

setStyleSheet("background-color: rgb(200,0,0),border-radiu:15px");
setStyleSheet( styleSheet().append(QString("border-style:solid; border-width:3px; border-color:black;")) );

我如何解决这个问题?

I am new in QT. I have 8 QT QPushButton like in this image.

enter image description here

Requirement

After clicking any button its border is highlighted with a black circle. The highlighted border should disappear only when any new button among the 8 is clicked and a black circle should encircle around that new button at run time.

Note: Circle should encircle around one button at a time which is clicked.

Attempt:

I am made the red circle using this code in QT form class

button1->setStyleSheet("QPushButton {background-color: rgb(200,0,0),border-radiu:15px}") ; 

In button clicked slot I am

void button1clicked()
{
button1->setStyleSheet("QPushButton {border-style:solid; border-width:3px; border-color:black;}") ; 

}

How do change the style sheet for a second time?

I have visited this

How to add style via setStyleSheet() without losing orignal style in Qt?

and applied this solution but it didn't work?

setStyleSheet("background-color: rgb(200,0,0),border-radiu:15px");
setStyleSheet( styleSheet().append(QString("border-style:solid; border-width:3px; border-color:black;")) );

How I can solve this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还如梦归 2025-01-30 21:07:04

在UI文件中添加此样式表:

QPushButton {
background-color: rgb(200,0,0);
}

QPushButton:checked {
border-style:solid; border-width:3px; border-color:black;
}

mainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow: public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

private slots:
    void  on_pushButton_clicked(bool checked);

    void  on_pushButton_2_clicked(bool checked);

    void  on_pushButton_3_clicked(bool checked);

    void  on_pushButton_4_clicked(bool checked);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->pushButton->setCheckable(true);
    ui->pushButton_2->setCheckable(true);
    ui->pushButton_3->setCheckable(true);
    ui->pushButton_4->setCheckable(true);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void  MainWindow::on_pushButton_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(true);
        ui->pushButton_2->setChecked(false);
        ui->pushButton_3->setChecked(false);
        ui->pushButton_4->setChecked(false);
    }
}

void  MainWindow::on_pushButton_2_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(false);

        ui->pushButton_2->setChecked(true);
        ui->pushButton_3->setChecked(false);
        ui->pushButton_4->setChecked(false);
    }
}

void  MainWindow::on_pushButton_3_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(false);
        ui->pushButton_2->setChecked(false);
        ui->pushButton_3->setChecked(true);

        ui->pushButton_4->setChecked(false);
    }
}

void  MainWindow::on_pushButton_4_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(false);

        ui->pushButton_2->setChecked(false);
        ui->pushButton_3->setChecked(false);
        ui->pushButton_4->setChecked(true);
    }
}

结果:

Add this stylesheet in your UI File :

QPushButton {
background-color: rgb(200,0,0);
}

QPushButton:checked {
border-style:solid; border-width:3px; border-color:black;
}

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow: public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

private slots:
    void  on_pushButton_clicked(bool checked);

    void  on_pushButton_2_clicked(bool checked);

    void  on_pushButton_3_clicked(bool checked);

    void  on_pushButton_4_clicked(bool checked);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->pushButton->setCheckable(true);
    ui->pushButton_2->setCheckable(true);
    ui->pushButton_3->setCheckable(true);
    ui->pushButton_4->setCheckable(true);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void  MainWindow::on_pushButton_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(true);
        ui->pushButton_2->setChecked(false);
        ui->pushButton_3->setChecked(false);
        ui->pushButton_4->setChecked(false);
    }
}

void  MainWindow::on_pushButton_2_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(false);

        ui->pushButton_2->setChecked(true);
        ui->pushButton_3->setChecked(false);
        ui->pushButton_4->setChecked(false);
    }
}

void  MainWindow::on_pushButton_3_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(false);
        ui->pushButton_2->setChecked(false);
        ui->pushButton_3->setChecked(true);

        ui->pushButton_4->setChecked(false);
    }
}

void  MainWindow::on_pushButton_4_clicked(bool checked)
{
    if (checked)
    {
        ui->pushButton->setChecked(false);

        ui->pushButton_2->setChecked(false);
        ui->pushButton_3->setChecked(false);
        ui->pushButton_4->setChecked(true);
    }
}

The Result:

enter image description here

小霸王臭丫头 2025-01-30 21:07:04

似乎您将样式表设置在窗口上,而不是按钮本身。因此,尝试此操作:

button1->setStyleSheet("background-color: rgb(200,0,0); border-radius: 15px;");
button1->setStyleSheet(button1->styleSheet().append(QString("border-style:solid; border-width:3px; border-color:black;")) );

更新
这是一种有效的方法:

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSignalMapper>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void buttonClicked(QObject* object);

private:
    Ui::MainWindow *ui;
    QSignalMapper* signalMapper;//to handle signals
    //previous clicked button
    QPushButton* clickedButton;
};
#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //we are gonna use signal mapper
    //since we have 8 buttons on UI
    //to avoid working with every buttons in 8 signals
    signalMapper = new QSignalMapper(this);

    for(int i = 1; i <= 8; ++i)
    {
        QPushButton* btn = this->findChild<QPushButton*>("button" +
                                                        QString::number(i));
        btn->setStyleSheet("background-color: red;"
                           "border-radius: 5px;");
        connect(btn, SIGNAL(clicked()),
                signalMapper, SLOT(map()));
        signalMapper->setMapping(btn, btn);

    }
    connect(signalMapper, SIGNAL(mappedObject(QObject*)),
            this, SLOT(buttonClicked(QObject*)));

    //by default, we take 1st button as marked
    clickedButton = ui->button1;
    clickedButton->setStyleSheet("background-color: red;"
                                 "border: 3px solid black;"
                                 "border-radius: 5px;");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::buttonClicked(QObject *object)
{
    QPushButton* btn = qobject_cast<QPushButton*>(object);
    QString temp = btn->styleSheet();
    btn->setStyleSheet(clickedButton->styleSheet());
    clickedButton->setStyleSheet(temp);
    clickedButton = btn;
}

ui包含从按钮1到按钮8的8个按钮。

这是结果:

Seems you're setting styleSheet to your window, not button's itself. So try this one:

button1->setStyleSheet("background-color: rgb(200,0,0); border-radius: 15px;");
button1->setStyleSheet(button1->styleSheet().append(QString("border-style:solid; border-width:3px; border-color:black;")) );

UPDATED:
Here's a way that works:

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSignalMapper>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void buttonClicked(QObject* object);

private:
    Ui::MainWindow *ui;
    QSignalMapper* signalMapper;//to handle signals
    //previous clicked button
    QPushButton* clickedButton;
};
#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //we are gonna use signal mapper
    //since we have 8 buttons on UI
    //to avoid working with every buttons in 8 signals
    signalMapper = new QSignalMapper(this);

    for(int i = 1; i <= 8; ++i)
    {
        QPushButton* btn = this->findChild<QPushButton*>("button" +
                                                        QString::number(i));
        btn->setStyleSheet("background-color: red;"
                           "border-radius: 5px;");
        connect(btn, SIGNAL(clicked()),
                signalMapper, SLOT(map()));
        signalMapper->setMapping(btn, btn);

    }
    connect(signalMapper, SIGNAL(mappedObject(QObject*)),
            this, SLOT(buttonClicked(QObject*)));

    //by default, we take 1st button as marked
    clickedButton = ui->button1;
    clickedButton->setStyleSheet("background-color: red;"
                                 "border: 3px solid black;"
                                 "border-radius: 5px;");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::buttonClicked(QObject *object)
{
    QPushButton* btn = qobject_cast<QPushButton*>(object);
    QString temp = btn->styleSheet();
    btn->setStyleSheet(clickedButton->styleSheet());
    clickedButton->setStyleSheet(temp);
    clickedButton = btn;
}

UI contains 8 buttons from button1 to button8.

Here's the result:
enter image description here

清旖 2025-01-30 21:07:04

传递样式表文字时,您必须谨慎
基于此处的文档。您需要设置样式表,如下所示:

 ui.pushButton->setStyleSheet("QPushButton:default {border-color: navy; /* make the default button prominent */}");

然后将是默认值。

You have to be carefully when passing the style sheet text,
based on the DOC here .. you need to set the stylesheet like below:

 ui.pushButton->setStyleSheet("QPushButton:default {border-color: navy; /* make the default button prominent */}");

Then it will be restord to default.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文