【发布时间】:2026-02-24 16:25:01
【问题描述】:
我在我的一个 QML 文件中使用了据称来自 QtQuick.Dialogs 的 FileDialog。但是,当我在 QtCreator 中打开上下文帮助时,它向我显示了 Qt Labs 的 FileDialog 条目,而不是 Qt Quick Dialogs 中的条目。我在我的项目中没有提到 Qt Labs。为什么它不使用我告诉它的 FileDialog?
我在 Ubuntu 18.04 上使用 QtCreator 4.6.2 和 Qt 5.11.1。
以下是相关代码sn-ps:
LoadFileDialog.qml:
import QtQuick 2.9
import QtQuick.Dialogs 1.3
FileDialog {
id: loadFile
folder: "."
selectExisting: true
selectMultiple: false
title: "Please select file to load"
onAccepted: {
//[...]
}
onRejected: {
//[...]
}
}
*.pro 文件中的导入语句:
QT += qml quick gui widgets
CONFIG += c++11
该应用程序在我的 Ubuntu 18.04 系统上运行良好,从使用 Qt 5.11.1 的 QtCreator 以及使用系统的 Qt 5.9 独立运行。一旦我尝试在带有 Qt 5.12 的 Ubuntu 20.04 系统上运行它,它就会抱怨找不到 FileDialog。我也不知道缺少什么库才能使其正常工作。
编辑:我尝试在 Ubuntu 20.04 中运行应用程序时得到的输出是:
qt5ct: using qt5ct plugin
QQmlApplicationEngine failed to load component
qrc:/main.qml:193 Type LoadFileDialog unavailable
qrc:/LoadFileDialog.qml:4 Type FileDialog unavailable
file:///usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Dialogs/DefaultFileDialog.qml:47 module "Qt.labs.folderlistmodel" is not installed
谢谢。
【问题讨论】:
-
帮助类型错误的问题可能只是 Creator 的问题,与您的问题无关。在 Ubuntu 20.04 上运行应用程序时遇到的实际错误是什么?
-
添加到原始问题。
-
所以,同时我发现20.04系统上缺少的包是qml-module-qt-labs-folderlistmodel,因为这似乎实际上是在QtQuick的DefaultFileDialog.qml中导入的。事实证明,在我不知道的 yubikey-manager-qt 安装过程中,它已自动安装在我的 18.04 系统上。尽管如此,两个系统上的文件对话框看起来明显不同,在 20.04 上,它与标准窗口管理器的文件对话框完全不同。
-
这意味着,无论出于何种原因,它决定使用非本机回退对话框。我不记得决定这一点的逻辑在哪里,但这里描述了这个过程:doc.qt.io/qt-5/qml-qtquick-dialogs-filedialog.html 具体来说,以“如果可能的话,FileDialog 的实现将是一个平台文件对话框”开头的部分。
-
如果您更喜欢(作为一种希望的临时解决方法)它使用 QFileDialog(又名小部件对话框)而不是 QML 对话框,请确保您的应用程序对象是 QApplication 而不是 QGuiApplication。检查是否可以使用本机对话框的逻辑在这里:code.qt.io/cgit/qt/qtquickcontrols.git/tree/src/dialogs/…