遇到一件非常诡异的事情,我写了一个QTableWidget 的子类,希望能处理drag and drop。但是无论如何也无法触发dragLeaveEvent、dragMoveEvent、dropEvent,只能触发dragEnterEvent。仔细看了QT的examples\draganddrop中的例子,其中的基类都是
QLabel、QWidget、QFrame!!只要我把自己写的子类的基类换成QLabel、QWidget、QFrame中的任意一个,都可以成功触发dragLeaveEvent、dragMoveEvent、dropEvent。两天了,两天了,怎么就一点门儿
没有呢??
我的代码如下:
///////////////////////////////////////////////////////////////////// // 头文件 ///////////////////////////////////////////////////////////////////// #ifndef SCRIPTEDIT_H
#define SCRIPTEDIT_H
#include <QTableWidget>
class ScriptEdit : public QTableWidget
{
Q_OBJECT
public:
ScriptEdit(QWidget *parent = 0);
~ScriptEdit();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dragLeaveEvent(QDragLeaveEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
void mousePressEvent(QMouseEvent *event);
private:
};
#endif // SCRIPTEDIT_H
///////////////////////////////////////////////////////////////////// // 源文件 ///////////////////////////////////////////////////////////////////// #include "scriptedit.h"
#include <QDebug>
ScriptEdit::ScriptEdit(QWidget *parent)
: QTableWidget(parent)
{
QStringList labels;
labels << tr("Step")
<< tr("Comment");
setColumnCount(2);
setHorizontalHeaderLabels(labels);
setAcceptDrops(true);
setDragEnabled(true);
setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(true);
setEditTriggers(QAbstractItemView::DoubleClicked);
}
ScriptEdit::~ScriptEdit()
{
}
void ScriptEdit::dragEnterEvent(QDragEnterEvent *event)
{
qDebug() <<"drag enter" <<endl;
}
void ScriptEdit::dragLeaveEvent(QDragLeaveEvent *event)
{
qDebug() <<"drag leave" <<endl;
}
void ScriptEdit::dragMoveEvent(QDragMoveEvent *event)
{
qDebug() <<"drag move" <<endl;
}
void ScriptEdit::dropEvent(QDropEvent *event)
{
qDebug() <<"drop" <<endl;
}
void ScriptEdit::mousePressEvent(QMouseEvent *event)
{
qDebug() <<"mouse press" <<endl;
}
[ 此帖被yanzhuliang在2010-11-01 17:18重新编辑 ]