2017-08-03 51 views
1

我在學習QT是如何工作的。我有這個小碼:Qt:寫入文件

QApplication app(argc, argv); 
QWidget fenetre; 
fenetre.setFixedWidth(400); 
fenetre.setFixedHeight(400); 

QPushButton *bouton = new QPushButton("Quit", &fenetre); 
bouton->setFixedHeight(50); 
bouton->setFixedWidth(100); 
bouton->move(170,310); 


QLabel *label = new QLabel("Something", &fenetre); 
label->move(30,200); 
QLineEdit *line = new QLineEdit(&fenetre); 
line->move(200,200); 

QWidget::connect(bouton, SIGNAL(clicked()),qApp, SLOT(quit())); 

fenetre.show(); 

我想知道我怎麼可以把0​​標籤的內容在文件(.txt)連續。 目標是在程序完成時,將用戶放入文本文件中的QLineEdit框中。

感謝

+1

'QLabel'或'QLineEdit'? – eyllanesc

+0

我的不好,我的意思是可以由用戶修改的QLineEdit的內容,是的。對不起:/ – Clement

+0

那麼你有沒有試圖在程序結束時將line-> text()中的字符串存儲到文件中? –

回答

0

您可以使用QFile在文件讀取/寫入數據的文本/二進制格式。

按鈕按下保存數據:

void MainWindow::on_btnSaveData_clicked() 
{ 
    writeDataInFile(ui->lineEdit->text()); 
} 

功能保存數據:

void MainWindow::writeDataInFile(QString data) 
{ 
    QString filePath = "D:/Your Path"; 
    QFile writeFile(filePath); 
    if(!writeFile.open(QFile::Append | QFile::Text)) 
    { 
     // Can't Open File. 
    } 
    else 
    { 
     if(data.length() > 0) 
     { 
      QTextStream in(&writeFile); 
      in << data << "\r"; 
     } 
    } 
    writeFile.close(); 
} 

這個函數獲取一個QString,打開一個文件(filePath),並在你的文件的末尾附加數據。

您可以修改功能並將QByteArray發送到函數或Vector。

1

QFile使用和QTextStream寫入到一個文件中,當QLineEdit::textChanged信號被髮射如下:

QObject::connect(line, &QLineEdit::textChanged, [](const QString& text) { 
    QFile file("output.txt"); 

    if(file.open(QFile::WriteOnly | QFile::Text)) { 
     QTextStream stream(&file); 
     stream << text; 
    } 
}); 

上面的代碼將連接一個lambda expressionQLineEdit::textChanged信號。該lambda的text參數將是您的line的更改內容。拉姆達內部的代碼塊簡單地用收到的text重寫"output.txt"

+1

downvote的原因是什麼? – Akira

+1

我有同樣的問題。簡單和很好的答案。給予好評。 – aghilpro

0

我想知道我怎麼可以把QLineEdit的標籤的內容在文件(.txt)不斷。目標是當程序完成時,將用戶放入QLineEdit框中的文本保存在文本 文件中。

我可以解釋這些詞作爲任你可能希望保存QLineEdit內容時,你的應用是即將關閉或者您想將其保存「上飛」,immidiately爲用戶類型的東西QLineEdit 。在這兩種情況下,你可以使用一些save()功能是這樣的:

void save(const QString &text) 
{ 
    QFile f("out.txt"); 
    bool ok = f.open(QIODevice::WriteOnly); 

    if(!ok) { 
     qDebug() << "open file error!"; 
     return; 
    } 

    QTextStream stream(&f); 
    stream << text; 
    f.close(); 
} 

,然後應用這些connect功能之一在main

// save on type 
QObject::connect(line, &QLineEdit::textChanged, [line](const QString &text) { 
    save(text); 
}); 

// save on application close. 
QObject::connect(&app, &QApplication::aboutToQuit, [line]() { 
    save(line->text()); 
}); 

這就夠用了根據這些connect S的一個您的需求。

注意:&QApplication::aboutToQuit當您的應用程序正在通過按下標準窗口「關閉」按鈕或按下自定義的「退出」按鈕關閉信號時,會發出信號。

+1

@Akira顯然。但是這也意味着每次編輯'QLineEdit'時都要執行磁盤操作。有時它不是你想要的。 –