Я использую 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);
Поскольку Неджат указал мне правильный ответ, вот код, который я сейчас использую:
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);
}
У меня была такая же проблема и сделал подкласс QLineView
происходит от QLineEdit
, Затем я переопределил void setReadOnly(bool)
и добавил член var QPalette activePalette_
Хранить QLineEdit
палитра в ctor.
Мой переопределенный метод Lokks, как это
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_);
}
}
Вы можете установить таблицу стилей, которая меняет цвет QLineEdit
объект, если его readOnly
свойство имеет значение true.
setStyleSheet("QLineEdit[readOnly=\"true\"] {""color: #808080;""background-color: #F0F0F0;""border: 1px solid #B0B0B0;""border-radius: 2px;}");