Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML中的自定义文件对话框_Qt_Qml_Qtquick2_Qt Quick - Fatal编程技术网

Qt QML中的自定义文件对话框

Qt QML中的自定义文件对话框,qt,qml,qtquick2,qt-quick,Qt,Qml,Qtquick2,Qt Quick,我愿意使用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.Layou

我愿意使用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的自定义或可更改行为,但迄今为止运气不佳。以下是我尝试过的:

在弹出窗口中单击okButton.onClicked,使属性别名为okButton.onClicked 定义okButton.onclick在我使用弹出窗口的位置 在弹出窗口外定义一个行为函数,并将其提供给弹出窗口 这些尝试都不起作用,我总是有编译错误

你知道我能做些什么使我的代码可重用吗

而且我在网上也找不到最近的干净的例子,你知道我在哪里可以找到吗

谢谢

Antoine。

来自QtQuick.Dialogs导入的文件对话框有一个属性,可用于另存为:

是否只能选择现有文件或目录

默认情况下,此属性为true。在打开对话框之前,必须将此属性设置为所需的值。将此属性设置为false意味着该对话框用于命名要保存内容的文件,或命名要创建的文件夹;因此,selectMultiple必须为false

如果你想要一个现代的移动界面,你最好自己制作。不过,我不会使用对话框,因为它更以桌面为中心。例如,Dropbox在其移动UI中使用类似ListView的内容:

QtQuick.Dialogs导入中的FileDialog有一个属性,可用于另存为:

是否只能选择现有文件或目录

默认情况下,此属性为true。在打开对话框之前,必须将此属性设置为所需的值。将此属性设置为false意味着该对话框用于命名要保存内容的文件,或命名要创建的文件夹;因此,selectMultiple必须为false

如果你想要一个现代的移动界面,你最好自己制作。不过,我不会使用对话框,因为它更以桌面为中心。例如,Dropbox在其移动UI中使用类似ListView的内容:


你在说哪个文件对话框@米奇,你真的帮我省了几个小时,谢谢!你在说哪个文件对话框@米奇,你真的帮我省了几个小时,谢谢!哈哈!这正是我所期待的建议!我将使用原型版本的对话框,但一旦我们达到测试版,我们将过渡到您的Listview,Dropbox样的主张。谢谢哈哈!这正是我所期待的建议!我将使用原型版本的对话框,但一旦我们达到测试版,我们将过渡到您的Listview,Dropbox样的主张。谢谢