Save and load txt file



  • Hi, I'm writing a simple program with Qt 5.0 and I'd be interested, via a button, to save the written text of a text in a .Txt file in the same folder where there are all the program files.
    Then, again using a button, I'd be interested to open a file manager window and choose here another text file which is opened in the text.
    Sorry for the various repetition of the word text; cordial greetings.
    This is the code:
    @import QtQuick 2.0
    import Ubuntu.Components 0.1
    Rectangle {
    width: 300
    height: 300
    color: "lightgray"

        TextArea {
                id:testo
                width: units.gu(37)
                height: units.gu(6)
                contentWidth: units.gu(30)
                contentHeight: units.gu(60)
                activeFocusOnPress : true
    
               }
         Column{
           anchors.centerIn: parent
           spacing: parent.width/6
    
           Button{
               id: exitButton
               text: "load"
    
    
                 }
           Button{
               id:savebutton
               text:"save"
               onClicked:???????
                 }
                }
            }@


  • Just create a QObject derived class, add a read and write slot and implement using QFile, register the class to QML, instantiate it in QML and connect it to the signals of your buttons.



  • Thanks for your reply can you give me an example, please



  • There is a pretty simple example here:

    http://www.developer.nokia.com/Community/Wiki/Reading_and_writing_files_in_QML

    It is Qt Quick 1 though so it will require a bit of adaptation.



  • Here is a quick and basic example for QtQuick2 - paths are hardcoded, since it is just an example:

    The FileHelper custom QML element:

    @class FileHelper : public QObject {
    Q_OBJECT
    public:
    explicit FileHelper(QObject *parent = 0) : QObject(parent) {}

    public slots:
    void writeFile(const QString &text) {
    QFile file("h:/test.txt");
    if (!file.open(QFile::WriteOnly | QFile::Text)) return;
    QTextStream out(&file);
    out << text;
    file.close();
    }

    QString readFile&#40;&#41; {
        QFile file("h:/test.txt"&#41;;
        if (!file.open(QFile::ReadOnly | QFile::Text&#41;&#41; return "";
        QTextStream in(&file);
        QString temp = in.readAll();
        file.close();
        return temp;
    }    
    

    };@

    Register the element to the engine in main.cpp:

    @#include <QtQuick>

    int main(int argc, char *argv[]) {
    ...
    qmlRegisterType<FileHelper>("FileHelpers", 1, 0, "FileHelper");
    ...
    }@

    And last - the QML:

    @import QtQuick 2.0
    import FileHelpers 1.0

    Rectangle {
    width: 360
    height: 360

    FileHelper {
        id: helper
    }
    
    TextEdit {
        id: myText
        anchors.fill: parent
        text: "test"
    }
    
    Button {
        name: "Read file"
        anchors.left: parent.left
        anchors.bottom: parent.bottom
        onClicked: myText.text = helper.readFile(&#41;
    }
    
    Button {
        name: "Write file"
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        onClicked: helper.writeFile(myText.text&#41;
    }
    

    }@



  • Thank you very much for the answer.
    When i start my program the terminal gives me this error:
    @2 module "FileHelpers" is not installed@

    How can I fix?



  • Did you register the class, i.e. the second step of my example?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.