我正在使用qt和qt创建者并使用它编译(Windows的mingw编译器)。我正在尝试创建一个具有一些基于鼠标的功能的列表框。我已经能够在其中添加上下文菜单。其次,当我右键单击ContextMenu时,选择ListBox项目。第三,即使我离开单击该项目,也选择了项目。我要做的是,如果选择了一个项目,然后我再次单击它,它应该取消选择列表菜单中的项目。问题是,如果我编写自己的代码,它将禁用默认操作,而IF语句将锁定窗口和窗口崩溃。我需要做什么才能处理选择和取消选择方法?似乎我做错了什么。这是我的代码。欢迎任何帮助。
#include "historicalrequests.h"
#include "ui_historicalrequests.h"
#include "customlistitemdelegate.h"
HistoricalRequests::HistoricalRequests(QWidget *parent) :
QWidget(parent),
ui(new Ui::HistoricalRequests)
{
ui->setupUi(this);
ui->historicalRequestsWidget->setItemDelegate(new CustomListItemDelegate(ui->historicalRequestsWidget));
QListWidgetItem *item = new QListWidgetItem();
item->setData(Qt::DisplayRole, "Title");
item->setData(Qt::UserRole + 1, "21/05/2017 12:12:456");
ui->historicalRequestsWidget->addItem(item);
QListWidgetItem *item2 = new QListWidgetItem();
item2->setData(Qt::DisplayRole, "Workspace");
item2->setData(Qt::UserRole + 1, "Description");
ui->historicalRequestsWidget->addItem(item2);
ui->historicalRequestsWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->historicalRequestsWidget, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint)));
}
HistoricalRequests::~HistoricalRequests()
{
delete ui;
}
void HistoricalRequests::customMenuRequested(QPoint pos){
// My customContextMenu click functions here
}
void HistoricalRequests::on_historicalRequestsWidget_clicked(const QModelIndex &index)
{
if(ui->historicalRequestsWidget->item(index.row())){
if((ui->historicalRequestsWidget->currentItem() == ui->historicalRequestsWidget->item(index.row()))){
qWarning("Same item" );
} else {
qWarning("Different item");
//ui->historicalRequestsWidget->item(index.row())->setSelected(true);
}
} else {
// some code here
}
}
据我了解,您需要做的就是将SelectionMode设置为MultiSelection:
ui->listWidget->setSelectionMode(QAbstractItemView::MultiSelection);
如果您只需要一个时间选择一个项目,则可以在连接到qselectionModel :: SelectionChanged Signal的插槽中处理它。您可以使用SelectionModel-> select()方法取消选择上一个项目。