我正在尝试将拖放功能添加到 QListWidget。使用以下代码达到了第一个里程碑。
//draglist.h
#include <QListWidget>
class SourceList : public QListWidget
{
public:
SourceList(QWidget * parent = 0);
protected:
void mousePressEvent(QMouseEvent *event);
};
//draglist.cpp
#include "draglists.h"
#include <QMouseEvent>
#include <QDebug>
#include <QMimeData>
#include <QDrag>
SourceList::SourceList(QWidget * parent)
:QListWidget(parent)
{
}
void SourceList::mousePressEvent(QMouseEvent *event)
{
//Data from the selected QListWidgetItem
QString itemData = currentItem()->data(Qt::DisplayRole).toString();
QMimeData *mimeData = new QMimeData;
mimeData->setText(itemData);
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->exec();
}
它启用了列表项的拖动功能,但不能再单击它们。如何保留单击左键选择列表中的项目的功能(如果mousePressEvent()
没有被覆盖,这就是行为)?
可能的解决方案
检查原始QAbstractItemView::mousePressEvent(QMouseEvent *event)的源代码并在实现中重新复制所需的代码SourceList::mousePressEvent(QMouseEvent *event)
。我正在寻找替代方案,如果存在的话。