gpt4 book ai didi

windows - 如果应用程序位于特定目录中,则拖放不起作用

转载 作者:可可西里 更新时间:2023-11-01 10:04:24 26 4
gpt4 key购买 nike

我在 Qt 应用程序中实现了拖放功能(如果您想查看一些代码,请参见下文)。我以为一切正常,直到用户告诉我它对他不起作用。

通常你会看到这个 Drag and drop ok图标,如果 dragEnterEvent() 没有调用 event->acceptProposedAction(),那么您会看到这个 Filetype unsupported图标。如果出现问题,您会看到类似于此的图标 Does not work icon (它不完全是那个图标,但我无法捕获它,因为 Windows 删除了屏幕截图中的鼠标图标)。

我们可以发现在某些计算机上(遗憾的是对我来说不是,所以调试非常困难)它取决于设置。特别是安装路径:如果应用程序位于一个特定目录(或其子目录之一)中,则会出现所述错误。如果我们将整个应用程序目录移动到其他地方并从那里执行,一切正常。

添加一些调试输出表明 dragEnterEvent() 在损坏的设置中没有触发。

可能是什么原因?我该如何调试该问题?


我们有一些怀疑,但没有什么真正有意义的。但我还是想分享它们:

  • 权限(但是为什么拖放要依赖权限,对吧?)
  • 使用了错误的库(因为安装了多个 Qt 版本)
  • 另一个小部件接收事件(这怎么取决于应用程序目录?)

代码片段:

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
/* more here */
{
/* more here */
setAcceptDrops(true);
/* more here */
}

void MainWindow::dragEnterEvent(QDragEnterEvent* event)
{
const QMimeData* mimeData = event->mimeData();

if (mimeData->hasUrls()) {
QString fileName = mimeData->urls().at(0).toLocalFile();
QFileInfo file(fileName);

if(isSupportedFileType(file.completeSuffix())) {
event->acceptProposedAction();
}
}
}


void MainWindow::dropEvent(QDropEvent *event)
{
const QMimeData* mimeData = event->mimeData();

if (mimeData->hasUrls()) {
QList<QUrl> urlList = mimeData->urls();

if(openFiles(urlList)) {
event->acceptProposedAction();
}
}
}

最佳答案

在一种情况下,D+D 似乎无缘无故地失败了。易于在您的计算机上重现,右键单击您的应用程序的快捷方式并选择“以管理员身份运行”。

UIPI禁止从未提升的应用程序拖动到提升的应用程序。没有响亮的反馈,您的应用程序根本不会获得任何 D+D 事件。就此采访您的用户,您会想知道他是否需要提升您的应用程序。让您的安装程序自动启动您的应用程序也会以同样的方式出现错误行为。

关于windows - 如果应用程序位于特定目录中,则拖放不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37828617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com