Я использую QT и QT Creator и компилирую его (компилятор mingw для Windows). Я пытаюсь создать список с некоторыми функциями мыши. Я был в состоянии добавить контекстное меню к нему. Во-вторых, когда я щелкаю правой кнопкой мыши по контекстному меню, выбирается элемент списка. В-третьих, даже если я щелкну левой кнопкой мыши на элементе, элемент будет выбран. То, что я хочу сделать, — это если элемент выбран, и я снова щелкаю на нем левой кнопкой мыши, он должен отменить выбор элемента в меню списка. Проблема заключается в том, что если я пишу свой собственный код, он отключает действие по умолчанию, а оператор 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. Там вы можете отменить выбор предыдущего элемента с помощью метода selectionModel-> select ().
Других решений пока нет …