2017-05-05 126 views
-3

我遇到了QPushButton的問題。我有三個不同的類(窗口),有不同的按鈕,我在每個類(窗口)中創建,它們都有紅色(這意味着我添加了特殊方法爲每個類中的這些按鈕設置顏色)。Qt pushButton和繼承

現在我必須創建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

+0

你不應該延長推按鈕只是爲了改變他們的顏色。你可以設計這些風格。 – dtech

+0

使用引號進行代碼樣式格式化,並將粗體字體用於......以及沒有任何內容。我允許自己爲你解決這個問題 – user463035818

+0

@dtech是的,我知道,但是想象一下,在每種顏色下的每個窗口中都有5-6個按鈕,現在我想改變它們的顏色。我想通過「單擊」來獲得我。否則,我想爲此創建一個特殊的課程。 – nikitaxgusev

回答

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在你的應用,不僅在主窗口的QPushButtons:

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

0

如果你調整窗口元素的顏色,最好和最簡單的方法是使用QPaletteqt palette explained 如果您正在使用Qt Designer(使用鼠標設計您的主窗口),您可以通過manse進行編輯。只需選擇MainWindow對象,然後在屬性編輯器中找到「調色板」並雙擊它(某個對話框將手工引導您)。

如果你想做這個應用程序的範圍,你可以在QApplication對象上設置這個調色板。很可能這對你來說很難(現在)。


替代方法是use style sheets。它更強大,更復雜(特別適合初學者)。

+0

@MarekR請看一個問題中的例子 – nikitaxgusev

+0

@nikitaxgusev我可以看到你正在嘗試使用樣式表,但是你做錯了。不要在單個小部件上設置樣式表。將它設置在QApplication上(這樣它們會影響所有的widows和widgets)或者在MainWindow上。 –

+0

@MakerR請給我一個例子,請 – nikitaxgusev