2010-10-27 39 views
0

的选择您好所有 我从QTreeView则继承类,我实现简单的(空)mousePressEvent功能
但每当我试图做到这一点,在QTreeView则该项目的选择是残疾人,当我删除这个功能一切正常工作
什么我想在这里失踪?
这里是代码:QTreeView则mousePressEvent实施防止物品

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); 
    } 
+0

找到答案在这里: http://www.qtcentre.org/threads/34915-Drag-and-drop-QTreeWidgetItem-to-QTableWidget – user63898 2010-10-27 15:29:09

回答

7

这是因为,当你覆盖的方法,原来上不再叫。您必须在您创建的方法中手动调用QPressreeView的mousePressEvent方法。

这里是如何做到这一点:

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

希望这有助于。

+0

嗨是的,我这样做,但现在它挡住了拖放事件 再次当我删除这种方法,D&D和工作.. – user63898 2010-10-27 14:23:31

+0

你确认你的方法是完全一样我上面写或你有什么添加?如果是,那是什么? – Live 2010-10-27 14:33:38

+0

是的,它是在问题中看到的代码,现在我发现了这个问题,它是在这段代码中: Qt :: DropAction dropAction = drag-> exec(Qt :: MoveAction);当我评论它正在工作,但是什么时候出现这种情况? – user63898 2010-10-27 15:03:02