我正在使用QML开发应用程序,并且是使用QML的初学者。
我想点击“按我”按钮,然后打开一个文件管理器,然后选择一个文件夹。然后单击“确定”,列表视图将列出UI上该文件夹中的所有图像。但是,我的程序会立即在启动时显示一个没有单击任何按钮的文件。此外,“按我”按钮在点击时没有响应。列表视图甚至没有显示出来。有谁可以指出我的错误?
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Dialogs 1.1
import Qt.labs.folderlistmodel 2.1
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
SwipeView {
id: swipeView
anchors.fill: parent
currentIndex: tabBar.currentIndex
Page1 {
}
Page {
Label {
text: qsTr("Second page")
anchors.centerIn: parent
}
}
}
footer: TabBar {
id: tabBar
currentIndex: swipeView.currentIndex
TabButton {
text: qsTr("First")
}
TabButton {
text: qsTr("Second")
}
}
}
Page1.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Dialogs 1.1
import Qt.labs.folderlistmodel 2.1
Page1Form {
FolderListModel
{
id: folderModel
showDirs: true
showDirsFirst: true
folder: fileDialog.fileUrl
nameFilters: ["Image Files (*.jpg *.png *.gif)"];
//nameFilters: ["*.jpg"]
}
Component {
id: fileDelegate
Text { text: fileName }
}
ListView {
anchors.fill: parent
model: folderModel
delegate: fileDelegate
}
FileDialog{
id: fileDialog;
title: "Please choose a file";
nameFilters: ["Image Files (*.jpg *.png *.gif)"];
selectFolder:true
visible: true
onAccepted: {
console.log("User has selected " + dialogFile.folder);
fileDialog.close()
}
}
button1.onClicked: {
fileDialog.open();
console.log("Button Pressed. Entered text: " + textField1.text);
}
}
Page1Form.ui.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
Item {
property alias textField1: textField1
property alias button1: button1
RowLayout {
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
anchors.top: parent.top
TextField {
id: textField1
placeholderText: qsTr("Text Field")
}
Button {
id: button1
text: qsTr("Press Me")
}
}
}
答案 0 :(得分:0)
设置Dialog.visible: true
与呼叫Dialog.open()
相同。只需删除此行即可。
以下是显示所选文件夹的示例代码,以防万一您会发现它很有用:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.2
import Qt.labs.folderlistmodel 2.1
import Qt.labs.platform 1.0
Window {
id: window
title: "Folder dialog test"
visible: true
width: 600
height: 400
ColumnLayout {
anchors.fill: parent
anchors.margins: 10
RowLayout {
Layout.preferredHeight: 40
Layout.fillWidth: true
TextField {
id: path
enabled: false
text: folderModel.folder
Layout.fillWidth: true
}
Button {
text: "..."
onClicked: folderDialog.open();
}
}
ListView {
Layout.fillHeight: true
Layout.fillWidth: true
model: FolderListModel {
id: folderModel
folder: ""
}
delegate: Text { text: fileName }
}
}
FolderDialog {
id: folderDialog
currentFolder: ""
folder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
onFolderChanged: {
folderModel.folder = folder;
}
}
}