我願意使用QML中的FileDialog,但事實證明它不適用於SaveAs情況(因爲不能指定不存在的文件名),而且對話的感覺並不真實,移動。QML中的自定義FileDialog
作爲一種變通方法我已決定建立一個簡單的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但迄今沒有很好的運氣。這是我曾嘗試:
- 使屬性別名在彈出okButton.onClicked
- 定義okButton.onClicked,我使用彈出
- 定義彈出外的行爲功能和將其提供給Popup
這些嘗試都不起作用,而且我總是有編譯錯誤。
任何想法,我可以使我的代碼可重用?
此外,我可以在互聯網上找到最近和乾淨的例子,任何想法,我可以找到的地方?
謝謝,
安託萬。
哪'FileDialog'你在說什麼? [這個可以另存爲。](http://doc.qt.io/qt-5/qml-qtquick-dialogs-filedialog.html#selectExisting-prop) – Mitch
@Mitch,你真的救了我幾個小時,謝謝! – arennuit