• 16421阅读
  • 7回复

[Solved-不过欢迎其他方法]Qt的 QTreeView如何设定鼠标拖动时候经过的item为选定状态? [复制链接]

上一主题 下一主题
离线fluke
 

只看楼主 倒序阅读 楼主  发表于: 2009-02-04
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我在用QTreeView来做一个左右两边拖放文件的应用程序。

其中一边是QTreeView+QdirModel实现PC本地目录浏览。

另外一边是虚拟的目录。

从左边拖放到右边的时候,startDrag里面可以根据currentIndex()来从model里面获取数据,

放到右边的时候,我希望能够知道鼠标放开位置上面的item的数据,但是那个item不一定是选中的,我的想法是应该在鼠标经过的时候就切换选定的item为鼠标当前经过的item。这样就保证了放开的时候能够通过currentIndex来获取数据。

我的问题是:
1. 如何设置鼠标经过的item为选定?
2. 如果上面没办法实现的话,如何得知drop下去的位置上面的item是哪个?
[ 此贴被fluke在2009-02-05 00:57重新编辑 ]
只看该作者 1楼 发表于: 2009-02-04
bool QAbstractItemModel::dropMimeData

看这个
离线fluke

只看该作者 2楼 发表于: 2009-02-04
发现QTreeWidget可以用你的办法实现,但是QTreeView不行,不知道我的做法有没有错。

QtreeView好像没有 virtual mimeTypes()

WidgetView里面不能指定model,而我一定需要自定义的model。。
离线fluke

只看该作者 3楼 发表于: 2009-02-04
貌似,可以用 indexAt(pos()) 解决。试试先。看了半天API。
离线fluke

只看该作者 4楼 发表于: 2009-02-05
之前说错了,不是 indexAt(pos())  而是在鼠标事件上面取pos .

// 放事件
void CLocalDirTreeView::dropEvent(QDropEvent *event)
{
    qDebug() << "CLocalDirTreeView::dropEvent(QDropEvent *event)";
    qDebug() << "local::dropEvent mouse pos" << event->pos();
    QObject *source =
            qobject_cast<QObject *>(event->source());
    if (source && source != this) {
        qDebug() << "CLocalDirTreeView::dropEvent << " << event->mimeData()->text() << event->mimeData()->data("drag/remote");

        QModelIndex dropIndex = indexAt(event->pos());
        if(dropIndex != QModelIndex()) {
            QDirModel *pModel = qobject_cast<QDirModel *>(model());
            qDebug() << "drop to local path" << pModel->filePath(dropIndex) << "isdir" << pModel->isDir(dropIndex);
        }

        // 接受
        event->setDropAction(Qt::MoveAction);
        event->accept();
    }
}
离线leon0356
只看该作者 5楼 发表于: 2009-11-02
我顶,学习中
离线duanchao1230
只看该作者 6楼 发表于: 2010-04-19
dsd
离线luoyes

只看该作者 7楼 发表于: 2010-04-20
void QAbstractItemView::entered ( const QModelIndex & index )   [signal]

This signal is emitted when the mouse cursor enters the item specified by index. Mouse tracking needs to be enabled for this feature to work.

这样你就可以知道是那个Item了。
快速回复
限100 字节
 
上一个 下一个