我正在使用 QListWidgetItem
在我的 QListWidget
中添加项目。
在某些情况下,我希望我的 QListWidget
的某些行变得不可选择。 (我的意思是我想要一些 QListWidgetItem
是不可选择的)
有什么办法吗?
PS:我试过了
listWidgetItem->setFlags(Qt::NoItemFlags)
listWidgetItem->setSelected(false);
但它们不会禁用项目的选择。
编辑:
QStringList _strListClients = _strClients.split(",",QString::KeepEmptyParts,Qt::CaseInsensitive);
for(int i = 0; i < _strListClients.count(); i++)//Add Client's Check Boxes
{
QListWidgetItem* _listWidgetItem = new QListWidgetItem(_strListClients[i], listWidgetClients);
listWidgetClients->addItem(_listWidgetItem);
if(_strListClients[i] == "Unknown"){
_listWidgetItem->setSelected(false);
_listWidgetItem->setTextColor(Qt::red);
_listWidgetItem->setFlags(_listWidgetItem->flags() & ~Qt::ItemIsSelectable);
}
最佳答案
只需删除 Qt::ItemIsSelectable
flag来自每个项目:
item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
或者,如果您想删除与该项目的所有交互,则删除Qt::ItemIsEnabled
。
例如
#include <QtWidgets>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QListWidget widget;
for (int i = 0; i < 100; ++i) {
QListWidgetItem *item = new QListWidgetItem(QStringLiteral("Item %1").arg(i));
if (i % 2 == 0) // disable one every two
item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
widget.addItem(item);
}
widget.show();
return app.exec();
}
关于qt - 有没有办法在我的 QListWidget 中禁用 QListWidgetItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34975673/