为什么QLineEdit样式在聚焦时没有改变?

Lui*_*igo 4 qt qtstylesheets

我正在使用Qt及其样式表开发GUI.在主窗口样式表上我放了以下样式:

QLineEdit:focus { border: 2px solid #006080; }

但是当我使用它时,风格并没有像我预期的那样真正改变.但是,如果我将相同的样式表直接放在所需的组件上,它就像魔术一样!但是,将样式表放在我可能想要的每个LineEdit上并不是一个好主意(这会大大增加添加新组件或更改样式表所需的工作量),也不会通过添加代码行来重新应用样式表setStyleSheet(styleSheet()).

有谁知道如何解决这个问题?

sse*_*ell 7

奇怪的是,它使用QLineEdit在我的Qt副本上工作:使用焦点

QLineEdit:focus
{
    border: 2px solid #006080;
}
Run Code Online (Sandbox Code Playgroud)

你确定你没有孩子风格在更远的地方推翻这个吗?就像它在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;" ) );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当然QStyleSheets只是QStrings,因此您可以预先存储预定义的样式以供使用.