QTreeview mousePressEvent实现可防止选择项目

时间:2010-10-27 13:18:33

标签: qt qtreeview

大家好 我有从Qtreeview继承的类,我实现了简单(空)mousePressEvent函数
但每当我尝试这样做时,Qtreeview中的项目选择都被禁用,当我删除此功能时一切正常 我在这里失踪了什么? 这是代码:

void MyTreeWidget::mousePressEvent(QMouseEvent *event)
    {   
        QModelIndex index =  this->indexAt(event->pos());
        QAbstractItemModel *model = this->model();
        QMap<int, QVariant> ItemData = model->itemData(index);
        QMap<int, QVariant>::const_iterator i = ItemData.constBegin();
        while (i != ItemData.constEnd()) {
            QString k = QString::number(i.key());
            QString v = i.value().toString();

         ++i;
        }
        if (event->button() == Qt::LeftButton) {
             QByteArray itemData ;
             QString urlTo;
             itemData.append(urlTo);
             QDrag *drag = new QDrag(this);
             QMimeData *mimeData = new QMimeData;
             mimeData->setData("application/x-dnditemdata", itemData);
             drag->setMimeData(mimeData);

             Qt::DropAction dropAction = drag->exec(Qt::MoveAction);
             if (dropAction == Qt::MoveAction)
             {
                UT::getInstance()->LogToFile("dropAction");
             }


        }
        QTreeView::mousePressEvent(event);
    }

1 个答案:

答案 0 :(得分:7)

这是因为当你覆盖一个方法时,不再调用原始的on。您必须在您创建的方法中手动调用QTreeView的mousePressEvent方法。

以下是如何操作:

void YourClass::mousePressEvent ( QMouseEvent * event )
{
    QTreeView::mousePressEvent(event);
}

希望这有帮助。