一、 給應(yīng)用程序設(shè)置菜單欄
比如:
在qt中,如果想要使用菜單欄功能,那么界面的基類要選擇QMainWindow,不能選擇QWidget QDialog
實(shí)現(xiàn)菜單欄步驟如下:
第一步:在UI設(shè)計(jì)師,直接雙擊菜單欄
第二步:在UI設(shè)計(jì)師,修改文本內(nèi)容和其他設(shè)置
進(jìn)行設(shè)置
設(shè)置的效果圖如下:
給菜單選項(xiàng),增加圖片資源
二、輸入對(duì)話框(QInputDialog)
讓用戶比較方便的輸入一些單一信息(The QInputDialog class provides a simple convenience dialog to get a single value from the user)
頭文件:
#include
在Qt中,提供了五個(gè)方法來(lái)給用戶使用
Five static convenience functions are provided: getText(), getMultiLineText(), getInt(), getDouble(), and getItem()
靜態(tài)函數(shù)的原型:
參數(shù) | 用處 |
---|---|
QString | getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) |
功能:返回一個(gè)單行的字符串信息
參數(shù)說(shuō)明:
- 參數(shù)一:QWidget *parent ----- 輸入對(duì)話框的 父部件,一般傳this
- 參數(shù)二:const QString &title ---- 輸入對(duì)話框的標(biāo)題,用戶自定義
- 參數(shù)三:const QString &label ---- 輸入信息提示 用戶定義
后面的參數(shù)默認(rèn)即可 - 返回值:?jiǎn)涡休斎氲淖址畔?br> 具體用法:
void InputDialogWin::on_inputSetButton_clicked()
{
//[1] 打開(kāi)輸入對(duì)話框,
// QString name = QInputDialog::getText(this,"名字修改","請(qǐng)重新輸入名字:"); //單行輸入
QString name= QInputDialog::getMultiLineText(this,"名字修改","請(qǐng)重新輸入名字:"); //多行輸入
//[2] 輸入信息 ---- >在輸入對(duì)話框中,完成
// [3] 得到它的返回值,并更新到UI
ui->nameLabel->setText(name);
}
三、QFile---- 文件類
該類是一個(gè)用戶讀寫文件的接口,它繼承于QFileDevice
在QIODevice類中,定義了訪問(wèn)I/O設(shè)備接口:QFile is an I/O device for reading and writing text and binary files and resources
(QFile類可以讀寫文本文件、二進(jìn)制文件及資源文件),對(duì)于文件的讀寫還可以使用QTextStream or QDataStream.
讀接口:
參數(shù) | 用處 |
---|---|
qint64 | read(char *data, qint64 maxSize)//一次讀取maxSize大小的數(shù)據(jù)存放在以data為首的內(nèi)存地址上 |
QByteArray | read(qint64 maxSize) |
QByteArray | readAll()—>一次性讀取所有的數(shù)據(jù) |
按行來(lái)讀取文件
qint64readLine(char *data, qint64 maxSize)QByteArrayreadLine(qint64 maxSize = 0)
參數(shù)說(shuō)明:
- char *data ----- 存放讀取出來(lái)數(shù)據(jù)首地址
- qint64 maxSize ------ 讀取的長(zhǎng)度,如果不夠,則按實(shí)際的來(lái)讀取
- 返回值:
QByteArray
通常我們會(huì)將轉(zhuǎn)它自動(dòng)轉(zhuǎn)換化QString
參數(shù) | 用處 |
---|---|
QString & | operator=(const QByteArray &ba) |
QString | data = file.readAll(); |
寫接口:
參數(shù) | 用處 |
---|---|
qint64 | write(const char *data, qint64 maxSize) |
qint64 | write(const char *data) |
qint64 | write(const QByteArray &byteArray) |
參數(shù)說(shuō)明:
- const char *data ----- 寫入數(shù)據(jù)的首地址
- qint64 maxSize ---- 寫入的大小,如果不夠,則按實(shí)際寫入
- const QByteArray &byteArray ------> 寫一個(gè)字節(jié)數(shù)組
而我們通常獲取到的數(shù)據(jù)是QString
QString類提供成員函數(shù)如下:
參數(shù) | 用處 |
---|---|
QByteArray | toUtf8() const |
功能:將QString轉(zhuǎn)換QByteArray
QFile功能接口函數(shù):
參數(shù) |
---|
QFile(const QString &name, QObject *parent) |
QFile(QObject *parent) |
QFile(const QString &name) |
該構(gòu)造函數(shù)可以通過(guò)指定一個(gè)文件的路徑,從而得到一個(gè)文件對(duì)象
QFile() 和
參數(shù) | 用處 |
---|---|
void | setFileName(const QString &name) |
打開(kāi)文件接口函數(shù)
bool QFile::open(QIODevice::OpenMode mode)
功能:以指定的方式來(lái)打開(kāi)文件
- QIODevice::ReadOnly ----- 只讀
- QIODevice::WriteOnly ---- 只寫
- QIODevice::ReadWrite ---- 讀寫
- QIODevice::Append ----- 以在文件末尾追加數(shù)據(jù)
- QIODevice::Truncate ---- 將文件的長(zhǎng)度截?cái)酁榱悖敲次募臄?shù)據(jù)為空
備注:如果文件不存在時(shí),想要?jiǎng)?chuàng)建文件,那么指定的方式要是WriteOnly or ReadWrite
如果QT中,在打開(kāi)一個(gè)文件時(shí),該文件不存在,那么,想要自動(dòng)創(chuàng)建它,則打開(kāi)文件時(shí),必須要有寫的權(quán)限:QIODevice::WriteOnly 或者 QIODevice::ReadWrite
//[1]打開(kāi)一個(gè)文件
QFile file("./text.txt"); //當(dāng)前路徑下的txt文件,如果該文件不存在,那么自動(dòng)創(chuàng)建
//[2] open
if(file.open(QIODevice::ReadWrite))
{
QString data = "helloworld";
file.write(data.toUtf8());
}
file.close();
在讀文件數(shù)據(jù)時(shí),可能出現(xiàn)的情況:
讀文件數(shù)據(jù)的方式:
QFile file1("C:/Users/PC/Desktop/text.txt");
if(file1.open(QIODevice::ReadOnly))
{
QString data = file1.readLine();
ui->label->setText(data);
#if 0
while(!file1.atEnd())
{
QString data = file1.readLine();
qDebug() << data;
}
#endif
}
file1.close();
四 JSON數(shù)據(jù)格式
JSON就是數(shù)據(jù)封裝形式,它是用來(lái)封裝數(shù)據(jù),相當(dāng)于一個(gè) 包裝盒子。
JSON基本概念:
- JSON對(duì)象 ---- > 單個(gè)類型的數(shù)據(jù),比如:int char string
- JSON數(shù)組 ----> 相當(dāng)于一個(gè)數(shù)組,可以用來(lái)存放:int char ,類類型
在數(shù)據(jù)封裝的格式中,
- 使用符號(hào)“
{ }
" 代表JSON對(duì)象 - 使用符號(hào)"
[ ]
"代表數(shù)組
JSON對(duì)象和JSON數(shù)組的關(guān)系:
- JSON對(duì)象可以嵌套JSON數(shù)組
- JSON數(shù)組可以嵌套JSON對(duì)象
- JSON對(duì)象可以嵌套JSON對(duì)象
- JSON數(shù)組可以嵌套JSON數(shù)組
了解JSON數(shù)據(jù)格式:
{ ---- json對(duì)象
"error_code": 0, /*返回碼*/
"reason": "請(qǐng)求成功!",
"result": [ --- json數(shù)組
{ ---- 數(shù)據(jù)中的元素的類型為json對(duì)象
"day": 1, /*日*/
"des": "1907年11月1日 電影導(dǎo)演吳永剛誕生 吳永剛,1907年11月1日生于江蘇吳縣。1932年后參加影片《三個(gè)摩登女性》、《母性之光》的拍攝工作。1934年在聯(lián)華影片公司編導(dǎo)處女作《神女》,一舉成名,...", /*描述*/
"id": 9000, /*事件ID*/
"lunar": "丁未年九月廿六",
"month": 11, /*月份*/
"pic": "", /*圖片*/
"title": "電影導(dǎo)演吳永剛誕生", /*事件標(biāo)題*/
"year": 1907 /*年份*/
},
{
"day": 1,
"des": "1902年11月1日 挪威作家格里格誕生 格里格,1902年11月1日生于卑爾根。挪威作家。 青年時(shí)代在奧斯陸和牛津求學(xué),好旅行。1924年出版描寫海員生活的小說(shuō)《航船在前進(jìn)》。1926年至1927年在...",
"id": 9010,
"lunar": "壬寅年十月初二",
"month": 11,
"pic": "",
"title": "挪威作家格里格誕生",
"year": 1902
},
{
"day": 1,
"des": "1911年11月1日,清廷宣布解散皇族內(nèi)閣,任命袁世凱為內(nèi)閣總理大臣,要他趕快從前線回京,籌組“責(zé)任內(nèi)閣”。11月13日,袁世凱抵達(dá)北京,16日組織新內(nèi)閣,以梁郭彥為外務(wù)大臣,趙秉鈞為民政大臣,...",
"id": 3577,
"lunar": "辛亥年九月十一",
"month": 11,
"pic": "",
"title": "袁世凱出任清朝內(nèi)閣總理大臣",
"year": 1911
}
]
}
從上面的格式可以看出:JSON數(shù)據(jù)都是鍵值對(duì)(key-value),可以通過(guò)鍵來(lái)獲取對(duì)應(yīng)的值
在解析數(shù)據(jù)之前,必須要保證數(shù)據(jù)格式的正確性,可以在網(wǎng)上直接在線驗(yàn)證格式:https://www.sojson.com/
在Qt中,對(duì)于JSON數(shù)據(jù)的接口:使用面向?qū)ο蟮乃枷雭?lái)進(jìn)行描述
- JSON文件 ------ 后綴(json)
QJsonDocument
比如:hello.json - JSON對(duì)象 -----
QJsonObject
- JSON數(shù)組 ------
QJsonArray
關(guān)于json接口類,這些類是屬于QT += core
中
在Qt中,解析JSON數(shù)據(jù)步驟:
- 第一步:將JSON文件轉(zhuǎn)換成QJsonDocument對(duì)象,具體來(lái)講,是將json文件中的數(shù)據(jù)轉(zhuǎn)換成
json文檔對(duì)象
QJsonDocument
fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
功能:將QByteArray &json轉(zhuǎn)換成QJsonDocument
參數(shù)說(shuō)明:
- QByteArray &json ------- json數(shù)據(jù),它可以從JSON文件中進(jìn)行讀取
- 第二步:從QJsonDocument對(duì)象中將JSON數(shù)據(jù)拿出來(lái)
對(duì)于QJsonDocument中,只有兩個(gè)部分組成:QJsonArray和 QJsonObject
參數(shù) | 用處 |
---|---|
QJsonObject | object() const |
功能:從QJsonDocument中得到一個(gè)QJsonObject
參數(shù) | 用處 |
---|---|
QJsonArray | array() const |
功能:從QJsonDocument中得到一個(gè)QJsonArray
- 第三步: 要 根據(jù)提供的數(shù)據(jù)格式來(lái)解析數(shù)據(jù)
在解析之前,必須要驗(yàn)證數(shù)據(jù)格式是否正確:https://www.sojson.com/文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-651685.html
{
"user": [{
"name": "張三",
"password": "123456"
},
{
"name": "李四",
"password": "123456"
},
{
"name": "王五",
"password": "123456"
}
]
}
第四步:將數(shù)據(jù)讀取,并使用文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-651685.html
QFile file("C:/Users/PC/Desktop/user.json");
//讀取JSON文件的數(shù)據(jù) ----- QByteArray
file.open(QIODevice::ReadOnly);
QByteArray array = file.readAll();
qDebug() << array;
// 將QByteArray轉(zhuǎn)換成QJsonDocument
// QJsonDocument
//fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
QJsonDocument doc = QJsonDocument::fromJson(array);
//根據(jù)JSON文件中的數(shù)據(jù)格式,來(lái)得到QJsonObject 或 QJsonArray
QJsonObject object = doc.object();
//根據(jù)數(shù)據(jù)格式和key-value來(lái)讀取數(shù)據(jù)
QJsonArray jsonArray = object.value("user").toArray();
for (int i=0;i<jsonArray.size();i++) {
QJsonObject userObject = jsonArray.at(i).toObject();
qDebug() << userObject.value("name").toString();
qDebug() << userObject.value("password").toString();
}
到了這里,關(guān)于05應(yīng)用程序設(shè)計(jì)和文件操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!