• 16419阅读
  • 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重新编辑 ]
离线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了。
离线duanchao1230
只看该作者 6楼 发表于: 2010-04-19
dsd
离线leon0356
只看该作者 5楼 发表于: 2009-11-02
我顶,学习中
离线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();
    }
}
离线fluke

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

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

QtreeView好像没有 virtual mimeTypes()

WidgetView里面不能指定model,而我一定需要自定义的model。。
只看该作者 1楼 发表于: 2009-02-04
bool QAbstractItemModel::dropMimeData

看这个
快速回复
限100 字节
 
上一个 下一个