企業(yè)網(wǎng)站手機(jī)版模板免費(fèi)下載上海關(guān)鍵詞優(yōu)化外包
QFile 類
構(gòu)造函數(shù)
QFile() 無參構(gòu)造
? ? 僅僅構(gòu)建一個(gè)QFile 對象,不設(shè)定文件名
QFile(文件名)
? ? 構(gòu)建一個(gè)QFile對象的同時(shí),設(shè)定文件名
? ? 但是注意,僅僅設(shè)定文件名,并不會打開該文件
設(shè)定文件名
QFile file
file.setFileName(文件名)
并不會打開
打開文件
file.open(打開模式)
文件寫
qint64 write(const char *data, qint64 maxSize)
? ? file.write(數(shù)據(jù),數(shù)據(jù)長度)//將data,最多maxSize個(gè)字節(jié),寫入file代表的文件中?
qint64 write(const char *data)
? ? file.write(數(shù)據(jù))//將data,到結(jié)束符為止,寫入file代表的文件中?
?qint64 write(const QByteArray &byteArray)
? ? QByteArray本質(zhì)是c語言的字符數(shù)組,做一段內(nèi)存來管理
我們的數(shù)據(jù)一般是一個(gè) QString 對象
? ? so要將一個(gè) QString 對象轉(zhuǎn)換成 QByteArray 對象:
? ??
? ??QString? str = "hello"//QString,有toLocal8Bit() :將QString轉(zhuǎn)換成 QByteArray
? ? QByteArray? ?qarr = str.toLocal8Bit();
class Widget : public QWidget
{
public:Widget(QWidget *parent = nullptr);~Widget();void save_data(const QString &filename,const QString &data);private:Ui::Widget *ui;QFile file;
};Widget::~Widget()
{QString name=ui->lineEdit->text();save_data("D:/name.text",name);delete ui;
}void Widget::save_data(const QString &filename, const QString &data)
{file.setFileName(filename);file.open(QFile::WriteOnly);file.write(data.toLocal8Bit());file.close();
}
文件讀?
qint64 read(char *data, qint64 maxSize)
? ? char buf[64] = {0}
? ? file.read(buf,64)//從file文件中讀取最多64個(gè)字節(jié)的數(shù)據(jù),并且將讀取到的數(shù)據(jù)寫入buf中
? ? 返回讀取到的數(shù)據(jù)的字節(jié)數(shù)
QByteArray read(qint64 maxSize)
? ? QByteArray? ?qarr = file.read(64)//?從file文件中,讀取最多64個(gè)字節(jié)的數(shù)據(jù),并且將讀取到的數(shù)據(jù),構(gòu)建成一個(gè)QByteArray對象后返回
將? QByteArray 數(shù)據(jù),轉(zhuǎn)換成 QString 數(shù)據(jù)
? ? ? ? 1:在QByteArray 尋找,返回值是 QString,函數(shù)名是toXXXX,形參沒有的函數(shù)
? ? ? ? 2:在QString的構(gòu)造函數(shù),尋找參數(shù)為 QByteArray 的構(gòu)造函數(shù)
? ? ? ? ? ? 不支持中文
? ? ? ? 3:在QString的靜態(tài)方法,尋找返回值為 QString,參數(shù)是 QByteArray的函數(shù)
? ? ? ? ? ?找到?fromLocal8Bit(),支持中文
QByteArray? ? readAll()
? ? QByteArray arr = file.readAll()//?讀取文件中的全部數(shù)據(jù)
//將讀取到的數(shù)據(jù),構(gòu)建成 QByteArray 后返回
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QString name=load_data("D:name.text");ui->lineEdit->setText(name);
}QString Widget::load_data(const QString &filename)
{file.setFileName(filename);file.open(QFile::ReadOnly);QByteArray barr=file.readAll();QString str=QString::fromLocal8Bit(barr);file.close();return str;
}
作業(yè)
1:在注冊登錄的練習(xí)里面,追加一個(gè)QListWidget 項(xiàng)目列表
要求:點(diǎn)擊注冊之后,將賬號顯示到 listWidget上面去
以及,在listWidget中雙擊某個(gè)賬號的時(shí)候,將該賬號刪除?
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QFile>
#include <QListWidgetItem>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void save_data(const QString &filename, const QString &data);QString load_data(const QString &filename);private slots:void on_lineEdit_textChanged(const QString &arg1);void on_lineEdit_2_textChanged(const QString &arg1);void on_pushButton_3_pressed();void on_pushButton_3_released();void on_checkBox_stateChanged(int arg1);void on_pushButton_clicked(); // 注冊按鈕點(diǎn)擊事件void on_listWidget_doubleClicked(const QModelIndex &index); // 雙擊刪除賬號void on_listWidget_itemDoubleClicked(QListWidgetItem *item);private:Ui::Widget *ui;QFile file;
};#endif // WIDGET_H#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 加載用戶名QString name = load_data("D:/name.text");ui->lineEdit->setText(name);// 加載復(fù)選框狀態(tài)QString ischeck = load_data("D:/ischecked.text");if (ischeck == "1") ui->checkBox->setChecked(true);// 如果復(fù)選框被選中,加載密碼if (ui->checkBox->isChecked()) {QString pswd = load_data("D:/pswd.text");ui->lineEdit_2->setText(pswd);}// 初始化按鈕狀態(tài)QString nameText = ui->lineEdit->text();QString pswdText = ui->lineEdit_2->text();if (nameText.isEmpty() || pswdText.isEmpty()) {ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);}
}Widget::~Widget()
{// 保存用戶名和密碼QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();save_data("D:/name.text", name);save_data("D:/pswd.text", pswd);delete ui;
}void Widget::save_data(const QString &filename, const QString &data)
{file.setFileName(filename);if (!file.open(QFile::WriteOnly)) {QMessageBox::warning(this, "Error", "Failed to save file: " + filename);return;}file.write(data.toLocal8Bit());file.close();
}QString Widget::load_data(const QString &filename)
{file.setFileName(filename);if (!file.open(QFile::ReadOnly)) {return QString(); // 文件不存在時(shí)返回空字符串}QByteArray barr = file.readAll();QString str = QString::fromLocal8Bit(barr);file.close();return str;
}void Widget::on_lineEdit_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if (name.isEmpty() || pswd.isEmpty()) {ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);} else {ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(true);}
}void Widget::on_lineEdit_2_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if (name.isEmpty() || pswd.isEmpty()) {ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);} else {ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(true);}
}void Widget::on_pushButton_3_pressed()
{ui->lineEdit_2->setEchoMode(QLineEdit::Normal);
}void Widget::on_pushButton_3_released()
{ui->lineEdit_2->setEchoMode(QLineEdit::Password);
}void Widget::on_checkBox_stateChanged(int arg1)
{save_data("D:/ischecked.text", arg1 == Qt::Checked ? "1" : "0");
}void Widget::on_pushButton_clicked()//注冊
{// 獲取用戶名QString name = ui->lineEdit->text();// 將用戶名添加到 QListWidgetif (!name.isEmpty()) {ui->listWidget->addItem(name);QMessageBox::information(this, "注冊成功", "賬號已添加到列表!");} else {QMessageBox::warning(this, "注冊失敗", "用戶名不能為空!");}
}void Widget::on_listWidget_doubleClicked(const QModelIndex &index)
{// 獲取選中的項(xiàng)QListWidgetItem *item = ui->listWidget->item(index.row());if (item) {// 刪除選中的項(xiàng)delete item;QMessageBox::information(this, "刪除成功", "賬號已從列表中刪除!");}
}void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{}#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
?