Почему стиль QLineEdit не меняется, когда фокусируется? - PullRequest
4 голосов
/ 13 июля 2011

Я разрабатываю графический интерфейс с использованием Qt и его таблиц стилей. В таблицу стилей главного окна я поместил следующий стиль:

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

Но когда я использую его, стиль действительно не меняется, как я ожидал. Однако, если я помещу ту же таблицу стилей непосредственно в нужный компонент, она работает как по волшебству! Но, на самом деле, не очень хорошая идея размещать таблицы стилей в каждом желаемом LineEdit (который значительно увеличил бы объем работы, необходимый для добавления новых компонентов или изменения таблицы стилей), не применяя повторно таблицу стилей путем добавления строк кода, таких как setStyleSheet(styleSheet()).

Кто-нибудь знает, как это решить?

Ответы [ 2 ]

7 голосов
/ 14 июля 2011

Странно, на моей копии Qt, использующей QLineEdit, он работает как требуется: focus, используя

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 голос
/ 30 ноября 2016

При необходимости вы можете настроить стили фокуса следующим образом:

QString styleSheet = "QLineEdit { border: 1px solid; border-color:#dcdcdc; border-radius: 4px;} QLineEdit:focus{border:1px solid gray;}";

yourFancyEdit->setStyleSheet(styleSheet);
...