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
相关产品推荐
相关产品推荐

