1.1 文件和目錄
QFile、QBuffer和QTcpSocket可支持讀寫設備,用open函數打開,用write或putChar函數寫入。用read和readLine或readAll進行讀取數據,最后用 close函數進行關閉設備。
1.1.1 QFile讀寫文件
QFile構造函數輸入參數文件路徑和文件名稱
setFileName:設置文件路徑函數來設置;
exists:檢查文件是否存在。
remove:刪除文件
open:打開文件
(1)QFile實例代碼:
QFile file("/home/administrator/testdir/test.txt"); //相對或者絕對路徑
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug()<<"Can't open the file!"<<endl;
}
while(!file.atEnd()) {
QByteArray line = file.readLine();
QString str(line);
qDebug()<< str;
}
1.1.2 QTextStream和QDataStream異同
QTextStream和QDataStream都是面向數據流的,都適用於QIODevice,TextStream能做的事情QDataStream都能做。QTextStream 側重於文本讀寫。這里所說的文本指的是普通的簡單的QChar,QString,QLatin1Char,int等等之內的。而QDataStream則像一個容器一樣,可以存放結構體等復雜數據類型,將數據序列化后按照先進先出的原則進行存儲,存入的順序和讀出的順序一定要一致,否則無法得到正確的數據。不僅可以讀寫text,而且還好可以讀寫一個特定數據類型,比如QPoint, QFont,幾乎Qt支持的所有類型都可以使用QDataSream進行操作。
(1)QTextStream寫入文本到文件
//下面代碼就是寫文件操作
QDir::setCurrent(QCoreApplication::applicationDirPath());//設置當前目錄為程序運行目錄
QFile data("output.txt");
if (data.open(QFile::WriteOnly | QFile::Truncate)) {
QTextStream out(&data);
out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
// writes "Result: 3.14 2.7 "
}
(2)QDataSream 寫入結構體到文件
就拿讀寫QPoint為例:
QDir::setCurrent(QCoreApplication::applicationDirPath());//設置當前目錄為程序運行目錄
QFile fileout("file.dat");
fileout.open(QIODevice::WriteOnly);
QDataStream out(&fileout); // we will serialize the data into the file
out << QString("the answer is"); // serialize a string
out << (qint32)42; // serialize an integer
QPoint pos(8, 6);//序列化一個點到文件
out << pos;//序列化一個點到文件
fileout.close();//一定要關閉,否則下面讀不到數據
QFile filein("file.dat");
filein.open(QIODevice::ReadOnly);
QDataStream in(&filein); // read the data serialized from the file
QString str;
qint32 a;
QPoint tmp;
in >> str >> a>>tmp; // extract "the answer is" and 42
1.1.3 QIODevice類
QIODevice直接繼承自QObject,QIODevice類是輸入/輸出設備的基類。為設備提供了公共實現和抽象接口用於讀寫塊數據。QIODevice是一個抽象類,不能被實例化Q3Socket, Q3SocketDevice,QAbstractSocket,QBuffer,QFile,QLocalSocket,QNetworkReply,QProcess繼承。
read,readLine,readAll讀取文件中的數據;
write寫入數據;
getChar,putChar,ungetChar函數實現單個字符的操作;
size:獲取文件大小;
seek:定位到文件任意位置;
pos:獲取當前位置;
atEnd判斷是否到文件末尾;
1.1.4 QFileInfo類
構造函數傳入QFile參數
SetFile設置QFile參數
Path:獲取文件路徑
FileName:獲取文件的名稱
baseName:獲取文件基本名稱
suffix:獲取文件名稱后綴
isFile,isDir,isSymLink 判斷文件類型
實例代碼
#include <QtCore/QCoreApplication>
#include <QFileInfo>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFileInfo info1("E:/meego/vi_command.lnk");
qDebug() << info1.isSymLink();
qDebug() << info1.absoluteFilePath();
qDebug() << info1.size();
qDebug() << info1.symLinkTarget();
qDebug() << "**********************";
QFileInfo info2(info1.symLinkTarget());
qDebug() << info2.isSymLink();
qDebug() << info2.absoluteFilePath();
qDebug() << info2.size();
return a.exec();
}
1.2 QDir類
QDir類提供了訪問目錄結構和他們的內容。
QDir類提供了訪問目錄結構和它們的內容的與平台無關的方式。
QDir用來操作路徑名稱、關於路徑和文件的訪問信息和操作底層文件系統。
QDir使用相對或絕對文件路徑來指向一個文件。絕對路徑是從目錄分隔符“/”或者帶有一個驅動器標識(除了在Unix下)。如果你總是使用“/”作為目錄分隔符,Qt將會把你的路徑轉化為符合底層的操作系統的。相對文件名是由一個目錄名稱或者文件名開始並且指定一個相對於當前路徑的路徑。
例如絕對路徑:
QDir("/home/administrator/soft");
QDir("D:/software");
我們可以使用isRelative()或isAbsolute()函數確認QDir是用的相對路徑還是絕對路徑。使用makeAbsolute()來轉換相對路徑的QDir轉換成絕對路徑的QDir.
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QDir dir;
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = dir.entryInfoList();
std::cout << " Bytes Filename" << std::endl;
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)
.arg(fileInfo.fileName()));
std::cout << std::endl;
}
return 0;
}
自己編了一個股票監控軟件,有如下功能,有興趣的朋友可以下載;
(1) 個股監測。監測個股實時變化,可以監測個股大單交易、急速拉升和下降、主力入場和出場、股票最高點和最低點提醒。檢測到最高點、最低點、主力進場點、主力退場點、急速拉升點、急速下跌點,給出語音或者聲音提醒,不用再時刻看着大盤了,給你更多自由的時間;
(2) 大盤監測。監測大盤的走勢,采用上證、深證、創業三大指數的綜合指數作為大盤走勢。並實時監測大盤的最高點和最低點、中間的轉折點。
(3) 股票推薦。還能根據歷史數據長期或短期走勢進行分析,對股市3千多個股票進行分析對比,選出漲勢良好的股票,按照增長速度從大到小排序,推薦給你漲勢良好的股票;
下載地址:
1.0.3版本(修復大盤指數崩潰缺陷)下載地址:
鏈接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取碼:003h
更新鏈接:
https://www.cnblogs.com/bclshuai/p/10621613.html