我正在使用Qt及其样式表开发GUI。在主窗口样式表上,我提出了以下样式:
QLineEdit:focus {
border: 2px solid #006080;
}
但是当我使用它时,风格并没有像我预期的那样真正改变。但是,如果我将相同的样式表直接放在所需的组件上,它就像魔术一样!但是,将样式表放在我可能想要的每个LineEdit上并不是一个好主意(这会大大增加添加新组件或更改样式表所需的工作量),也不会通过添加代码行(如{)来重新应用样式表。 {1}}。
有谁知道如何解决这个问题?
答案 0 :(得分:7)
奇怪,它使用QLineEdit在我的Qt副本上运行:使用焦点
QLineEdit:focus
{
border: 2px solid #006080;
}
你确定你没有一个儿童风格在更远的地方推翻这个吗?就像在MainWindow上一样,它将是第一个被推翻的东西。
潜在的解决方法是使用事件过滤器:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->installEventFilter( this );
ui->lineEdit_2->installEventFilter( this );
}
...
bool MainWindow::eventFilter( QObject *object, QEvent *event )
{
QLineEdit* edit = qobject_cast< QLineEdit* >( object );
if( edit != NULL )
{
if( event->type( ) == QEvent::FocusIn )
{
edit->setStyleSheet( QString( "border: 10px solid #000000;" ) );
}
else if( event->type( ) == QEvent::FocusOut )
{
edit->setStyleSheet( QString( "border: 1px solid #000000;" ) );
}
}
}
当然QStyleSheets只是QStrings,因此您可以预先存储预定义的样式以供使用。
答案 1 :(得分:1)
如果需要,您可以通过编程方式设置焦点样式:
QString styleSheet = "QLineEdit { border: 1px solid; border-color:#dcdcdc; border-radius: 4px;} QLineEdit:focus{border:1px solid gray;}";
yourFancyEdit->setStyleSheet(styleSheet);