2015-11-06 53 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引入动态特性

相关问题