QT:无法在ListBoxWidget中的ListBox项目中添加选择和取消选择功能



我正在使用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()方法取消选择上一个项目。

最新更新