2015-11-06 78 views
0

我有一堆名爲「e1」,「e2」,「e3」等的lineEdits。 我想設置相同的樣式表對所有這些在一個循環中,沒有實現代碼QT/C++通過從變量中獲取其名稱來設置QObject的屬性

ui->e1->setStyleSheet("background-color: white");  
    ui->e2->setStyleSheet("background-color: white"); 
    ui->e3->setStyleSheet("background-color: white"); 
    ui->e4->setStyleSheet("background-color: white"); 
    ui->e5->setStyleSheet("background-color: white"); 
    ui->e6->setStyleSheet("background-color: white"); 

,但這樣的事情:

for (z=1; z<7; z=z+1) 
    {ui->e&z->setStyleSheet("background-color: white");} 

也許有另一種方式的屬性設置爲一堆相似的物體?任何幫助表示感謝,提前謝謝!

回答

1

有幾種方法可以做到這一點。

陣列

如果您使用的是Qt設計,這將是一個痛苦的事情。但是,如果沒有,只需將你所有的QLineEdits填入std::array並從那裏取出。

命名約定

強制執行順序命名約定爲您QLineEdit S,例如infoField1,infoField2等,然後只需致電some_qobject.findChild(QString("infoField%1").arg(i))。然而,這很容易出錯。

樣式

我還沒有實際使用使用Qt樣式表,但它看起來像你使用的東西CSS-像,不是嗎?在這種情況下,你不應該只寫一種風格並將其應用於特定的一組(甚至全部)?我相信this將是一個很好的去尋找的地方。

+0

一些原因我不得不使用Qt Disigner;(和事業恰克lineEdits的樣式表是使lineEdit的背景紅色以防輸入錯誤的數據,所以這段代碼是從清除背景到「默認」白色的按鈕。 –

+0

有狀態的樣式?[你可以用動態屬性來做到這一點](http://doc.qt.io/ qt-5/stylesheet-examples.html#customizing-using-dynamic-properties)。在HTML/CSS中的等價物將是使用'.class-selectors',但儘管Qt樣式表存在這種語法,但它意味着不同的東西。 – JesseTG

0

明白了。

爲此使用了findChild方法和循環。

for (int e=1; e<7; e= e+1) 
    { 
     QLineEdit *field = findChild<QLineEdit*>("e" +QString::number(e)); 
     field->setStyleSheet("background-color: white"); 
     field->setText(""); 
    } 

的作品就像一個魅力,但由於@JesseTG引入動態特性