web-dev-qa-db-ja.com

QLineEditをWindowsで編集できないようにする方法

Qt 5.2を使用していますが、QLineEditを編集できないようにしたいと考えています。これの問題は、そのように見えないことです。 setReadOnly(true)を使用すると、背景が白のままで、編集可能であるように見えます。

無効にすると、灰色になり、テキストも薄い灰色になります。問題は、無効な状態ではテキストをコピーできないことです。

では、QLineEditを適切に編集不可にして、そのように見せるためにはどうすればよいでしょうか。 Windowsでは、そのようなコントロールは通常灰色ですが、テキストは黒のままです。もちろん、スタイルを手動で設定することもできますが、これはハードコードされており、他のプラットフォームでは正しく表示されない可能性があることを意味します。

22
Devolus

行編集を読み取り専用にした後、背景とテキストの色を好きなように設定できます:

ui->lineEdit->setReadOnly(true);

QPalette *palette = new QPalette();
palette->setColor(QPalette::Base,Qt::gray);
palette->setColor(QPalette::Text,Qt::darkGray);
ui->lineEdit->setPalette(*palette);
20
Nejat

Nejatが彼の答えで私を正しい方向に向けたので、ここで私が使用するコードを次に示します。

QPalette mEditable = mGUI->mPathText->palette();  // Default colors
QPalette  mNonEditable = mGUI->mPathText->palette();
QColor col = mNonEditable.color(QPalette::Button);
mNonEditable.setColor(QPalette::Base, col);
mNonEditable.setColor(QPalette::Text, Qt::black);

....

void MyWidget::setEditable(bool bEditable)
{
    mGUI->mPathText->setReadOnly(!bEditable);
    if(bEditable)
        mGUI->mPathText->setPalette(mEditable);
    else
        mGUI->mPathText->setPalette(mNonEditable);
}
5
Devolus

QLineEditプロパティがtrueに設定されている場合、readOnlyオブジェクトの色を変更するスタイルシートを設定できます。

setStyleSheet("QLineEdit[readOnly=\"true\"] {"
              "color: #808080;"
              "background-color: #F0F0F0;"
              "border: 1px solid #B0B0B0;"
              "border-radius: 2px;}");
1
thuga

同じ問題があり、QLineViewから派生したサブクラスQLineEditを作成しました。次に、void setReadOnly(bool)を再実装し、メンバー変数QPalette activePalette_を追加しました

QLineEditsパレットをctor内に保存します。

私の再実装されたメソッドはこのように表示されます

void QLineView::setReadOnly( bool state ) {
    QLineEdit::setReadOnly(state);
    if (state) {
        QPalette pal = this->activePalette_;
        QColor color = pal.color(QPalette::disabled, this->backgroundRole());
        pal.setColor(QPalette::Active, this->backgroundRole(), color);
        pal.setColor(QPalette::InActive, this->backgroundRole(), color);
        this->setPalette(pal);
    }
    else {
        this->setPalette(this->activePalette_);
    }
}
1
Kai Walz