如题,为了实现QListView每次只能单击一个item,单击item时,右上角
显示勾选,再单击后显示不勾选。具体代码如下:
- //初始化QListView
- m_listView = new QListView(m_widgetPage2);
- m_listView->setStyleSheet("...");
- m_itemDelegate = new ItemDelegate;
- m_listView->setItemDelegate(m_itemDelegate);
- m_listView->setSpacing(10);
- m_listView->setFlow(QListView::LeftToRight);
- m_listView->setViewMode(QListView::ListMode);
- m_listView->setDragEnabled(false);
- m_listView->setResizeMode(QListView::Adjust);
- //m_listView->setSelectionMode(QAbstractItemView::MultiSelection); 如果添加此行代码,item能多选,也能单击单选并单击单选取消
- m_listView->setSelectionBehavior(QAbstractItemView::SelectItems);
- m_listView->setWrapping(true);
- m_listView->setContextMenuPolicy(Qt::NoContextMenu);
- m_listView->setCursor(QCursor(Qt::PointingHandCursor));
当鼠标悬浮在items上时,右上角显示一个圆圈,点击时右上角显示一个勾选,再点击时,右上角取消勾选显示未点击状态。即在代理添加
- if(option.state.testFlag(QStyle::State_Selected))
- {
- //选中时勾选png图标
- QPixmap checkImg(":/res/listview/check.png");
- painter->drawPixmap(circle.x(), circle.y(), checkImg.width(), checkImg.height(), checkImg);
- }
- else if(option.state.testFlag(QStyle::State_MouseOver)) //鼠标悬浮
- {
- //未选状态,显示一个圆圈
- QPixmap uncheckImg(":/res/listview/uncheck_1.png");
- painter->drawPixmap(circle.x(), circle.y(), uncheckImg.width(), uncheckImg.height(), uncheckImg);
- }
因为想要做成每次只能点击一个item,如果选中该item,即鼠标第一次点击后,会出现勾选,第二次点击后,取消勾选(若鼠标仍然悬浮在该item上面,即会显示一个圆圈)。如以上代码,如果加上m_listView->setSelectionMode(QAbstractItemView::MultiSelection);,则可以实现鼠标第一次勾选,第二次取消勾选的功能,可是这样就选择多个item,不满足一次只能勾选一个item。各位大佬,有什么办法,能做到每次只选择一个item,第一次勾选,第二次取消勾选吗?欢迎各位大佬指点一二,小弟感激不尽,在线等!!!