Qt pushButton和继承

时间:2017-05-05 20:29:22

标签: c++ qt

我遇到QPushButton的问题。我有三个不同的类(窗口),有不同的按钮,我在每个类(窗口)创建,它们有红色(这意味着我添加了特殊的方法来为每个类中的这些非常按钮设置颜色)。 / p>

现在我必须在主窗口上选择一个按钮颜色来创建QRadioButtons。但是我一般都不能这样做,我只能为主要的windwow按钮做,不适用于2D和3d窗口。

我解决这个问题的主要想法是继承,所以我需要创建一个自己的抽象类PushButton,其中包含一些特殊属性(大小,颜色等)。然后我需要继承主类QPushButton

说实话,这很容易说,但很难做到。你能帮忙实现吗?知道这不是教程。但如果可以,谢谢!

我的例子,所以我有一个主窗口:

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        QLabel *label_pic;

        QRadioButton *yellow;
        QRadioButton *black;
        QRadioButton *blue;

        QRadioButton *button_red;
        QRadioButton *button_green;
        QRadioButton *button_yellow;

    private slots:
      [......]

        void button_yellow_clicked();
        void button_green_clicked();
        void button_red_clicked();

        [......]
    private:
        Ui::MainWindow *ui;
    };
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
   [.....created some buttons....]
  /////////////////////////////////////////////////////////////
    yellow=new QRadioButton(this);
    yellow->setText("Yellow");
    yellow->setGeometry(QRect(120,270, 100, 20));

    button_red=new QRadioButton(this);
    button_red->setText("Red");
    button_red->setGeometry(QRect(230,300, 100, 20));  
////////////////////////////////////////////////////////////////////////// 
    connect(button_yellow,SIGNAL(clicked()),SLOT(button_yellow_clicked()));

}

void MainWindow::button_yellow_clicked()
{
    ui->pushButton_2->setAutoFillBackground(true);
    ui->pushButton->setStyleSheet("background-color: rgb(2, 120, 0); color: rgb(4, 208, 63)");

}

所以,他们有另一个带有另一个按钮的课程,但我想在主按钮中按一次QRadiButton更改一次。

2 个答案:

答案 0 :(得分:1)

Use style sheets。它们易于使用,完全符合您的要求。

setStyleSheet("QPushButton { background-color: yellow }");会将MainWindow中所有按钮的颜色更改为黄色。

所以在您的代码中

void MainWindow::button_yellow_clicked()
{
    ui->pushButton_2->setAutoFillBackground(true);
    setStyleSheet("QPushButton {background-color: yellow }");    
}

如果您希望应用程序中的所有 QPushButtons出现此行为,而不仅仅是MainWindow中的QPushButtons:

qApp->setStyleSheet("QPushButton { background-color: yellow }");

答案 1 :(得分:0)

如果要调整窗口元素的颜色,最好也是最简单的方法是使用QPaletteqt palette explained 如果您使用Qt Designer(使用鼠标设计主窗口),您可以通过manse进行编辑。只需选择MainWindow对象,然后在属性编辑器中找到" palette"并双击它(某些对话框将引导您)。

如果要在此应用程序范围内执行此操作,可以在QApplication对象上设置此调色板。很可能这对你很难(现在)。

替代方法是use style sheets。它更强大,更复杂(特别是初学者)。