example c++ qt readonly qlineedit

c++ - example - qtextedit



Cómo hacer que un QLineEdit no sea editable en Windows (4)

Como Nejat me indicó la dirección correcta con su respuesta, aquí está el código que ahora uso:

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); }

Estoy usando Qt 5.2 y me gustaría hacer un QLineEdit no editable. El problema con esto es que no lo parece. Cuando se usa setReadOnly(true) se mantiene con un fondo blanco y parece que todavía es editable.

Si lo inhabilito, se vuelve gris y el texto también se vuelve un gris más claro. El problema es que uno no puede copiar el texto desde él, en un estado deshabilitado.

Entonces, ¿cómo puedo hacer un QLineEdit correctamente no editable y también hacer que se vea como él? En Windows, tal control suele ser gris, pero el texto permanece en negro. Por supuesto, podría establecer el estilo manualmente, pero esto significa que está codificado y puede parecer mal en otras plataformas.


Después de hacer que la línea se edite solo, puede configurar los colores de fondo y de texto como desee:

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


Podría establecer una hoja de estilo que cambie el color de un objeto QLineEdit , si su propiedad readOnly se establece en true.

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


Tuve el mismo problema e hice una subclase QLineView derivada de QLineEdit . Luego, reimplementé void setReadOnly(bool) y agregué un miembro var QPalette activePalette_

Almacena la paleta de QLineEdit dentro del ctor.

Mi método reimplementado lokks como este

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_); } }