2016-01-24 28 views
0

Я использую QListWidgetItem, чтобы добавить элементы в мой QListWidget.Есть ли способ отключить QListWidgetItem в моем QListWidget?

В некоторых ситуациях я хочу, чтобы некоторые строки моего QListWidget стали не подлежит выбору. (Я имею в виду, я хочу, чтобы QListWidgetItem был не выбран)

Есть ли способ сделать это?

PS: Я пытался

listWidgetItem->setFlags(Qt::NoItemFlags) 

listWidgetItem->setSelected(false); 

, но они не отключают выбор элементов.

Edit:

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); 

    } 

}

+0

Но вы не вынимая выбираемый флаг, как я сказал в моем ответе ... – peppe

+0

я сделал. но не был успешным. –

ответ

1

Вы можете попробовать следующее:

1) Перекрыть щелкнутой/событие выбора (жаль, что я не помню точное название Doing так. вы можете иметь какое-то значение флага/bool для элемента, а если установлено как не выбранное, вы просто возвращаетесь.

2) Вместо этого переопределить вас jus t подключиться к сигналу и выполнить вышеуказанную проверку, и если вы не хотите выбирать этот элемент, вы его не выбираете впоследствии.

Немного о работе, но я не знаю, есть ли встроенный способ сделать это. Проверка документации Я не видел метод отключения для самого элемента.

Если вы идете по пути просмотра списка, вы должны иметь больше контроля над этим, также на дисплее, чтобы вы могли отображать его серым цветом и т. Д. Однако просмотр немного больше работает.

М.

+0

Я использовал «connect (listWidget, SIGNAL (itemClicked (QListWidgetItem *)), это, SLOT (itemIsSelected (QListWidgetItem *)));» по другой причине. когда элементы выбираются. Я хотел отделить некоторые из них по другой причине: –

+0

вы должны иметь возможность справиться с дополнительной сложностью в той же функции –

+0

OK! Я получаю это и применяю ваше предложение. спасибо –

2

Просто удалите Qt::ItemIsSelectable flag из каждого пункта:

item->setFlags(item->flags() & ~Qt::ItemIsSelectable); 

Или удалить Qt::ItemIsEnabled, если вы хотите, чтобы удалить все взаимодействия с элементом.

E.g.

#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(); 
} 
+0

Я попробовал оба из них и не получил никакого результата! –

+0

parden? что означает U под «SSSCE»? –

+0

Можете ли вы вставить [Short, Self Contained, Correct (Compilable), Example] (http://sscce.org/) – peppe