2014-10-29 5 views
2

Вы можете переключить QCheckBox, щелкнув по строке метки. Это дает пользователю удобную для пользователя цель.Qt - как переключить QListWidgetItem, нажав на текст

Однако, если у меня есть QListWidget с проверяемыми элементами, пользователь должен щелкнуть внутри маленькой коробки, чтобы переключить элемент. Это делает проверку предметов утомительными и даже немного болезненными для тех из нас, у которых есть повторяющаяся стресс-травма.

Я попытался подключиться к элементу QListWidget itemClicked signal и переключить элемент. Это отлично работает, если пользователь нажимает на текст элемента. Но если они на самом деле нажимают на поле, состояние проверки переключается, затем посылается сигнал itemClicked, а код переключает состояние проверки обратно туда, где он был.

Может ли кто-нибудь предложить способ переключения состояния проверки, щелкнув либо по галочке, либо по элементу?

Благодаря ...

ответ

1

QListWidgetItem не дает никакой возможности узнать, где же пользователь нажмет, ярлык или окно, так что самый простой способ заключается в использовании QCheckBox в качестве виджета. Теперь QCheckBox будет вести себя как QCheckBox и пользователь будет иметь возможность проверить окно, нажав везде (на QCheckBox)

for(int r=0;r<7;r++) 
{ 
    QListWidgetItem* lwi = new QListWidgetItem; 
    ui->listWidget->addItem(lwi); 
    ui->listWidget->setItemWidget(lwi, new QCheckBox(QString("checkBox%1").arg(r))); 
} 

Недостатки: это может привести к снижению производительности, если у вас есть много пунктов.

+0

Благодаря @Chernobyl. Наверное, я знал о настройке виджета элементов в прошлом. Я попробую мои короткие списки. Не так уверен в архитектурных чертежах, с которыми я имею дело, которые могут содержать 100 имен слоев ... –

2

Вы можете просто оставить флаг Qt::ItemIsUserCheckable unset, а затем состояние чек не изменится, когда на него будет установлен флажок. Когда тогда itemClicked сигнал QListWidget подключен к слоту, который переключает состояние проверки, состояние проверки больше не будет переключено.

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

 Смежные вопросы

  • Нет связанных вопросов^_^