You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt C++中修改QListWidget可编辑项编辑状态下的背景色

QListWidget编辑项背景变黑的解决方法

我制作了一个待办事项QListWidget,给列表项设置了Qt::ItemIsEditable属性,支持双击编辑文本内容,但编辑时文本框背景变为黑色,希望将其修改为其他颜色。以下是创建列表项的代码及当前使用的QSS样式表:

创建列表项代码

MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

    QFile file(path);

    if(!file.open(QIODevice::ReadOnly)) {
        QMessageBox::information(0, "error", file.errorString());
    }

    QTextStream in(&file);

    while(!in.atEnd()) {
        QListWidgetItem *item = new QListWidgetItem(in.readLine(), ui->listWidget);
        if(item->checkState())
        {
            item->setCheckState(Qt::Checked);
        }
        else
        {
            item->setCheckState(Qt::Unchecked);
        }

        item->setForeground(QBrush(Qt::black));

        ui->listWidget->addItem(item);
        item->setFlags(item->flags() | Qt::ItemIsEditable | Qt::ItemIsUserCheckable);

    }

    file.close();
}

当前使用的QSS样式表

QListWidget::indicator:checked {
    image: url(:/resources/images/sillycat.jpg);
}

QListWidget::item:selected {
    background-color: #9de0be;
    color: black;
}

QListWidget::item:editable {
    background-color: white;
}

解决方法

你当前的QSS只针对未进入编辑状态的项设置了样式,而QListWidget在编辑时会自动生成一个QLineEdit作为输入控件,这个控件需要单独设置样式。

修改你的QSS,添加针对QLineEdit的规则即可:

/* 设置编辑时输入框的背景色和文字颜色 */
QListWidget QLineEdit {
    background-color: white; /* 可替换为你需要的颜色,比如#f8f8f8 */
    color: black;
}

如果需要区分选中和未选中项的编辑器样式,可以使用更具体的选择器:

/* 未选中项的编辑器样式 */
QListWidget::item:!selected QLineEdit {
    background-color: #f0f0f0;
    color: #333;
}

/* 选中项的编辑器样式 */
QListWidget::item:selected QLineEdit {
    background-color: #9de0be;
    color: black;
}

原来的QListWidget::item:editable规则仅作用于未激活编辑状态的列表项,对编辑时的输入框不起作用,所以必须单独配置QLineEdit的样式。

内容的提问来源于stack exchange,提问作者Boriscodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:50:08