如何在Windows中使QLineEdit无法编辑

Dev*_*lus 21 c++ qt readonly qlineedit

我正在使用Qt 5.2,我想做一个QLineEdit不可编辑的.这个问题是它看起来不像.使用setReadOnly(true)时保持白色背景,看起来仍然可以编辑.

如果我禁用它,它会变成灰色,文本也会变浅.问题是,在禁用状态下无法复制文本.

那么我怎样才能使一个QLineEdit正确的不可编辑,并使它看起来像它.在Windows中,这样的控件通常是灰色的,但文本保持黑色.当然我可以手动设置样式,但这意味着它是硬编码的,在其他平台上可能看起来不对.

Nej*_*jat 18

在进行只读行编辑后,您可以将背景和文本颜色设置为您喜欢的任何颜色:

ui->lineEdit->setReadOnly(true);

QPalette *palette = new QPalette();
palette->setColor(QPalette::Base,Qt::gray);
palette->setColor(QPalette::Text,Qt::darkGray);
ui->lineEdit->setPalette(*palette);
Run Code Online (Sandbox Code Playgroud)


Dev*_*lus 5

由于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);
}
Run Code Online (Sandbox Code Playgroud)