我愿意使用QML中的FileDialog,但事实证明它不适用于 SaveAs 情况(因为你不能指定一个不存在的文件名),而且对话的感觉不是很现代或移动。
作为一种解决方法,我决定构建一个简单的 MyFileDialog ,如下所示:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
Popup
{
implicitWidth: window.width / 3 * 2
implicitHeight: window.height / 3 * 2
x: (window.width - width) / 2
y: 20
modal: true
focus: true
property alias title: popupLabel.text
contentItem: ColumnLayout
{
id: settingsColumn
spacing: 20
// Popup title.
Label
{
id: popupLabel
font.bold: true
anchors.horizontalCenter: parent.horizontalCenter
}
// File path.
TextField
{
id: field
placeholderText: "File path..."
implicitWidth: parent.width
}
// Buttons.
RowLayout
{
spacing: 10
Button
{
id: okButton
text: "Ok"
onClicked: { onOkClicked(); close();}
Material.foreground: Material.primary
Material.background: "transparent"
Material.elevation: 0
Layout.preferredWidth: 0
Layout.fillWidth: true
}
Button
{
id: cancelButton
text: "Cancel"
onClicked: { state = false; }
Material.background: "transparent"
Material.elevation: 0
Layout.preferredWidth: 0
Layout.fillWidth: true
}
}
}
}
现在我希望这个对话框可以在几种情况下重复使用,例如:打开文件,导入文件,保存文件......但这意味着 okButton.onClicked 的行为对于每种情况都不同。
我已经尝试了几种方法为 okButton.onClicked 指定自定义(或说可更改)行为但到目前为止没有好运。这是我尝试过的:
这些尝试都没有奏效,而且我总是有编译错误。
有什么想法可以让我的代码重复使用吗?
另外,我在互联网上找不到最新且干净的例子,我知道在哪里可以找到它吗?
谢谢,
安托。
答案 0 :(得分:4)
FileDialog
导入的 QtQuick.Dialogs
有一个selectExisting
属性,您可以将其保存为:
是否只能选择现有文件或目录。
默认情况下,此属性为true。在打开对话框之前,必须将此属性设置为所需的值。将此属性设置为false意味着该对话框用于命名要保存内容的文件,或命名要创建的文件夹;因此selectMultiple必须为false。
如果你想要一个现代化的移动界面,你最好自己制作。但是,我不打算使用对话框,因为它更加以桌面为中心。例如,Dropbox在其移动UI中使用类似ListView
的内容: