5

Qt とそのスタイルシートを使用して GUI を開発しています。メイン ウィンドウのスタイルシートに、次のスタイルを配置しました。

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

でも使ってみると思ったほどスタイルが変わらない。ただし、同じスタイルシートを目的のコンポーネントに直接配置すると、魔法のように機能します! しかし、まあ、必要なすべての LineEdit にスタイルシートを配置するのは本当に良い考えではありません (新しいコンポーネントの追加やスタイルシートの変更に必要な作業量が大幅に増加します) setStyleSheet(styleSheet())

これを解決する方法を知っている人はいますか?

4

2 に答える 2

9

奇妙なことに、QLineEdit:focus using を使用して 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 は単純な QString であるため、定義済みのスタイルを保存して使用することができます。

于 2011-07-13T20:26:58.313 に答える