Qt 5.2を使用していますが、QLineEdit
を編集できないようにしたいと考えています。これの問題は、そのように見えないことです。 setReadOnly(true)
を使用すると、背景が白のままで、編集可能であるように見えます。
無効にすると、灰色になり、テキストも薄い灰色になります。問題は、無効な状態ではテキストをコピーできないことです。
では、QLineEdit
を適切に編集不可にして、そのように見せるためにはどうすればよいでしょうか。 Windowsでは、そのようなコントロールは通常灰色ですが、テキストは黒のままです。もちろん、スタイルを手動で設定することもできますが、これはハードコードされており、他のプラットフォームでは正しく表示されない可能性があることを意味します。
行編集を読み取り専用にした後、背景とテキストの色を好きなように設定できます:
ui->lineEdit->setReadOnly(true);
QPalette *palette = new QPalette();
palette->setColor(QPalette::Base,Qt::gray);
palette->setColor(QPalette::Text,Qt::darkGray);
ui->lineEdit->setPalette(*palette);
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);
}
QLineEdit
プロパティがtrueに設定されている場合、readOnly
オブジェクトの色を変更するスタイルシートを設定できます。
setStyleSheet("QLineEdit[readOnly=\"true\"] {"
"color: #808080;"
"background-color: #F0F0F0;"
"border: 1px solid #B0B0B0;"
"border-radius: 2px;}");
同じ問題があり、QLineView
から派生したサブクラスQLineEdit
を作成しました。次に、void setReadOnly(bool)
を再実装し、メンバー変数QPalette activePalette_
を追加しました
QLineEdit
sパレットを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_);
}
}