qt - 为什么 QLineEdit 样式在聚焦时不会改变?

标签 qt qtstylesheets

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

QLineEdit:focus {
    border: 2px solid #006080;
}
但是当我使用它时,风格并没有像我预期的那样真正改变。但是,如果我将相同的样式表直接放在所需的组件上,它就像魔术一样!但是,将样式表放在我可能想要的每个 LineEdit 上并不是一个好主意(这会大大增加添加新组件或更改样式表所需的工作量),也不能通过添加代码行(例如 setStyleSheet(styleSheet()))来重新应用样式表.
有谁知道如何解决这个问题?

最佳答案

奇怪的是,它在我的 Qt 副本上按需要使用 QLineEdit:focus 使用

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

你确定你没有在更远的地方覆盖这个 child 的风格吗?由于它在 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,因此您可以存储预定义的样式以供使用。

关于qt - 为什么 QLineEdit 样式在聚焦时不会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684394/

相关文章:

c++ - 在 QPushButton 的子类的构造函数中设置 CSS

qt - 使用 QApplication::setStyleSheet 覆盖 Qt 中设置的 QSS 属性

qt - 如何从 Qt 代码启动 MeeGo/Nokia N9 中的视频套件?

qt - 更改QListView的多个选择模式

c++ - QDirIterator(Windows)应该不区分大小写,但不能区分大小写

c++ - Qt Stylesheet按钮背景颜色

c++ - 是什么导致样式表渗入子小部件

c++ - 如何更改 drawText 上的字体大小?

javascript - 如何制作动态表

c++ - 我真的应该为我的应用程序使用一个 qss 文件,而不是为每个 (UI) 类使用一个 qss 文件吗?