2017-03-03 13 views
2

を節約しながらqfiledialogのデフォルトのファイル名を設定する方法はあります。だからQMLで使う必要があります。しかし、私が知る限り、QMLのFileDialogにはデフォルトの保存ファイル名を設定するメソッド/プロパティはありません。description.Iは任意のウィジェット</em></strong>なくてはQtクイックアプリケーション<strong><em>にQFileDialogを使用する必要があるとして、ファイル

誰もがこのような要件に同じ問題を抱えていますか?

+0

[ドキュメント](http://doc.qt.io/qt-5/qml- qtquick-dialogs-filedialog.html)、 'fileUrl'はより適切なプロパティと思われます。 – Jarod42

+0

いいえ、それは使用できません、fileUrlは読み取り専用プロパティです – LL2012

+0

'QFileDialog'に同じデフォルトファイル名を設定できますか? – folibis

答えて

-1

QMLはこのような特徴が欠けている。解決方法はを確認してください。

EDIT:

ソリューションは.proファイル

QT += widgets 

qmlfile.h

//qmlfile.h 
#ifndef QMLFILE_H 
#define QMLFILE_H 

#include <QObject> 

class QMLFile : public QObject 
{ 
    Q_OBJECT 

public: 
    explicit QMLFile(QObject *parent = 0); 

    Q_INVOKABLE QString getFileContents() const; 

    Q_INVOKABLE void saveFileContents(QString fileContents) const; 
}; 

#endif 

qmlfile.cpp

0123に以下を追加しますので、ウィジェットを使用していますより
#include <QFileDialog> 
#include <QTextStream> 
#include <QDebug> 
#include "qmlfile.h" 

QMLFile::QMLFile(QObject *parent): QObject(parent) 
{ 

} 

QString QMLFile::getFileContents() const 
{ 
    QString fileName = QFileDialog::getOpenFileName(NULL, tr("Open File"), "/home", tr("Text Files (*.txt)")); 
    qDebug() << "fileName:" << fileName; 
    QFile file(fileName); 
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
     return ""; 

    QString content = file.readAll(); 
    file.close(); 
    return content; 
} 

void QMLFile::saveFileContents(QString fileContents) const 
{ 
    QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save File"), "/home/ansh/data.txt", tr("Text Files (*.txt)")); // This is were default file name is selected 

    QFile file(fileName); 
    if(file.open(QIODevice::WriteOnly | QIODevice::Text)) 
    { 
     qDebug() << "created file:" << fileName; 
     QTextStream stream(&file); 
     stream << fileContents << endl; 
     file.close(); 
     return; 
    } 
    else 
    { 
     qDebug() << "could not create file:" << fileName; 
     return; 
    } 
} 

main.cppに

#include <QGuiApplication> 
#include <QQuickView> 
#include <QQmlContext> 
#include <QApplication> 
#include "qmlfile.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    QQuickView view; 
    QMLFile qmlFile; 
    view.rootContext()->setContextProperty("QMLFile", &qmlFile); 
    view.setSource(QUrl(QLatin1String("qrc:/main.qml"))); 
    view.show(); 

    return app.exec(); 
} 

main.qml

import QtQuick 2.5 
import QtQuick.Controls 2.0 

Rectangle { 
    width: 360; height: 360 

    Rectangle{ 
     id:buttons 
     height: 50; width: parent.width; anchors.top: parent.top 

     Button { 
      anchors { 
       left: parent.left 
       leftMargin: 5 
       top: parent.top 
       topMargin: 5 
      } 
      text: "open" 
      onClicked: txt.text = QMLFile.getFileContents(); 
     } 

     Button { 
      anchors { 
       right: parent.right 
       rightMargin: 5 
       top: parent.top 
       topMargin: 5 
      } 
      text: "save" 
      onClicked: QMLFile.saveFileContents(txt.text); 
     } 
    } 

    Rectangle{ 
     id:textHandle 
     width: parent.width; height: parent.height - buttons.height; anchors.bottom: parent.bottom 

     TextEdit{ 
      id: txt; anchors.fill: parent 
     } 
    } 
} 
+1

他のWebページへのリンクのみで回答するのは受け入れられません。 –

+0

@SurajeetBharatiコードは、ここで多く書くべき方法です。 –

+0

ここにコピーできますか? – LL2012

関連する問題

 関連する問題