为啥 Qt 中的拖放停止工作?

Posted

技术标签:

【中文标题】为啥 Qt 中的拖放停止工作?【英文标题】:Why does drag and drop in Qt stops working?为什么 Qt 中的拖放停止工作? 【发布时间】:2015-01-18 04:41:57 【问题描述】:

在我们在 qt 4.8.5 中构建的软件中,在某些情况下拖放会停止工作。它应该在两个地方工作。一个是将文件拖到应用程序的某个位置,另一个是在 QTreeWidget 中,您可以在其中将一些叶子放入文件夹中。

但在某些机器 (Windows) 上,这两种方法都只是停止工作或从一开始就不起作用。然后只出现一个禁止光标。重新启动应用程序后,拖放再次起作用。 windows下权限不同好像不是问题。

我不知道在哪里寻找这个问题。任何建议表示赞赏。

【问题讨论】:

如果没有更多信息,就不可能为您提供帮助。你调试过代码吗?必须有(AFAIK)一些代码来处理小部件上是否接受拖动,您可能会在那里找到错误。请调试并显示代码的相关部分 对于 QTreeWidget,我为此重写了 dragEnterEvent。当您开始拖动其中一片叶子时一切正常时,就会触发此操作。但是当它不工作时它不会被解雇。我还可以看到叶子和文件夹的所有标志仍然正确(叶子 = ItemIsDragEnabled,文件夹 = ItemIsDropEnabled)。如果某些东西禁用了拖放,我搜索了 setAcceptDrops(false) 的整个代码,但事实并非如此。 【参考方案1】:

在网上搜索了几天后,我找到了问题的原因。

https://bugreports.qt-project.org/browse/qtbug-28601

在我们的软件中,您可以通过调用 setWindowFlags 来切换模块的大小。之后不再处理拖放事件。

我可以通过调用来解决这个问题:

setAttribute( Qt::WA_AcceptDrops, false );
setAttribute( Qt::WA_AcceptDrops, true );

在需要拖放的小部件上。希望我们很快更新到 Qt 5.x。 :/

【讨论】:

【参考方案2】:

我遇到了同样的问题,所以我再次重新安装了 qt,它开始正常工作,但第二天我开始遇到同样的问题,所以现在不用卸载并再次安装 qt creator,只需清理缓存和临时文件

【讨论】:

以上是关于为啥 Qt 中的拖放停止工作?的主要内容,如果未能解决你的问题,请参考以下文章

新的拖放机制在 Qt-Quick (Qt 5.3) 中无法按预期工作

Javafx 可检索的拖放错误

在 RecyclerView 中的特定位置拖放停止

关于qt中的QTreeWidget的拖放问题

JavaFX Scene Builder 拖放的 IntelliJ IDEA 插件停止工作

Qt4是不是实现了窗口图标的拖放?