我正在使用Qt 5.2,我想让QLineEdit
无法编辑。这个问题是它看起来不像。使用setReadOnly(true)
时,它会保持白色背景,看起来仍然可以编辑。
如果我禁用它,那么它会变成灰色,文本也会变浅。问题是,在禁用状态下,无法复制文本。
那么我怎样才能使QLineEdit
正确地不可编辑,并使它看起来像它。在Windows中,这样的控件通常是灰色的,但文本保持黑色。当然我可以手动设置样式,但这意味着它是硬编码的,在其他平台上可能看起来不对。
答案 0 :(得分:17)
在对行进行只读编辑后,您可以将背景和文本颜色设置为您喜欢的颜色:
ui->lineEdit->setReadOnly(true);
QPalette *palette = new QPalette();
palette->setColor(QPalette::Base,Qt::gray);
palette->setColor(QPalette::Text,Qt::darkGray);
ui->lineEdit->setPalette(*palette);
答案 1 :(得分:4)
由于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);
}
答案 2 :(得分:1)
我遇到了同样的问题,并从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_);
}
}
答案 3 :(得分:1)
如果QLineEdit
属性设置为true,则可以设置一个更改readOnly
对象颜色的样式表。
setStyleSheet("QLineEdit[readOnly=\"true\"] {"
"color: #808080;"
"background-color: #F0F0F0;"
"border: 1px solid #B0B0B0;"
"border-radius: 2px;}");