2016-07-26 150 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