the*_*220 5 c++ windows winapi qt
我目前正在研究Windows的qt应用程序.用户需要能够选择一个目录来加载所有文件.我遇到了与此相关的问题.这看起来很愚蠢,但我一直得到同样的反馈.最终用户对文件对话框感到困惑,因为它们导航到该文件夹,但它不显示任何文件.即使他们正在选择一个文件夹,它也会使他们感到困惑,因为他们看不到目录中的文件.
所以我决定深入研究并做一些研究.从我发现的情况来看,似乎基本上有两种选择.在IFileOpenDialog用FOS_PICKFOLDERS,这是我目前通过Qt的使用的是什么QFileDialog.或者SHBrowseForFolder,它确实有效,但非常有限.
我错过了任何选择吗?似乎IFileOpenDialog显示文件而不允许用户选择它们将是理想的.有没有办法实现这个目标?我发现很多旧的信息说这是不可能的,但没有确定的更新近.
FileDialog您是否尝试过QML 文件对话框selectFolder: true?由于 Qt5 文档说
\n\n\n如果可能的话,FileDialog 的实现将是一个平台文件对话框。如果这是不可能的,那么它将尝试实例化 QFileDialog。
\n
对于目录集来说,它可能对用户更友好,因为它使用比 QFileDialog 更原生的对话框。我在 MacOS 上尝试过,它完美地显示了您想要的行为,但我附近没有 Windows 开发机器,但找到了一个附加的最小项目:
\n\n主要.qml:
\n\nimport QtQuick 2.2\nimport QtQuick.Controls 1.0\nimport QtQuick.Dialogs 1.2\n\nApplicationWindow\n{\n visible: true\n width: 640\n height: 480\n title: qsTr("Minimal Qml")\n FileDialog {\n id: fileDialog\n title: "Please choose a directory"\n selectFolder: true\n folder: shortcuts.home\n onAccepted: {\n console.log("You chose: " + fileDialog.fileUrls)\n Qt.quit()\n }\n onRejected: {\n console.log("Canceled")\n Qt.quit()\n }\n Component.onCompleted: visible = true\n }\n} \nRun Code Online (Sandbox Code Playgroud)\n\n主程序
\n\n#include <QApplication>\n#include <QQmlApplicationEngine>\nint main(int argc, char** argv)\n{\n QApplication app(argc, argv);\n QQmlApplicationEngine engine;\n engine.load(QUrl(QStringLiteral("main.qml")));\n return app.exec();\n}\nRun Code Online (Sandbox Code Playgroud)\n\nqml.qrc
\n\n<RCC>\n <qresource prefix="\xe2\x81\x84">\n <file>main.qml</file>\n </qresource>\n</RCC>\nRun Code Online (Sandbox Code Playgroud)\n\nCMakeLists.txt
\n\ncmake_minimum_required(VERSION 3.13)\nproject(untitled1)\n\nset(CMAKE_CXX_STANDARD 14)\n\nfind_package(Qt5 COMPONENTS Widgets Qml Quick REQUIRED)\n\n\ninclude_directories(${Qt5Widgets_INCLUDE_DIRS} ${QtQml_INCLUDE_DIRS})\nadd_definitions(${Qt5Widgets_DEFINITIONS} ${QtQml_DEFINITIONS} ${${Qt5Quick_DEFINITIONS}})\nqt5_add_resources(QT_RESOURCES qml.qrc)\nset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")\nset(CMAKE_AUTOMOC ON)\nset(CMAKE_AUTORCC ON)\nset(CMAKE_AUTOUIC ON)\nset(PROJECT "MinimalQml")\n\nconfigure_file(main.qml main.qml COPYONLY)\n\nadd_executable(${PROJECT} main.cpp ${QT_RESOURCES})\ntarget_link_libraries(${PROJECT}\n Qt5::Widgets\n Qt5::Qml\n Qt5::Quick\n )\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |