2016-07-26 88 views
1

我願意使用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但迄今沒有很好的運氣。這是我曾嘗試:

  1. 使屬性別名在彈出okButton.onClicked
  2. 定義okButton.onClicked,我使用彈出
  3. 定義彈出外的行爲功能和將其提供給Popup

這些嘗試都不起作用,而且我總是有編譯錯誤。

任何想法,我可以使我的代碼可重用?

此外,我可以在互聯網上找到最近和乾淨的例子,任何想法,我可以找到的地方?

謝謝,

安託萬。

+1

哪'FileDialog'你在說什麼? [這個可以另存爲。](http://doc.qt.io/qt-5/qml-qtquick-dialogs-filedialog.html#selectExisting-prop) – Mitch

+0

@Mitch,你真的救了我幾個小時,謝謝! – arennuit

回答

3

FileDialogQtQuick.Dialogs進口有selectExisting屬性,它可以用來爲節省:

是否只有現有的文件或目錄可以選擇。

默認情況下,此屬性爲true。打開對話框之前,必須將此屬性設置爲所需的值。將此屬性設置爲false意味着該對話框用於命名要保存某個文件的文件或命名要創建的文件夾;因此selectMultiple必須是false。

如果你想要一個現代化的移動界面,你最好自己做。儘管如此,我不會參與對話,因爲這是更加以桌面爲中心的。 Dropbox的,例如,使用其移動UI有點像ListView

dropbox

+0

哈哈!這正是我期待的建議類型!我將使用原型版本的對話框,但只要我們進入測試階段,我們就會過渡到您的Listview,類似Dropbox的主張。謝謝! – arennuit