在Qt中要動態載入DLL檔可以用QLibrary來載入
首先
#include < QLibrary >
定義Function
typedef void (*Function_Name)(int 參數1,int 參數2 , ...);
然後在程式中載入的方法是
QLibrary testlib("DLL_Name"); //此處DLL_Name不用加.dll
if(test_lib.load())//載入dll並判斷是否成功
{
qDebug()<<"load dll ok.";
//宣告Function(DLL_Function_Name為DLL檔裡定義的Function名稱)
Function_Name test_function = (Function_Name)test_lib.resolve("DLL_Function_Name");
//現在可以使用Function了
if(test_function)
{
int a = 0;
int b = 0;
test_function( a, b );
}
}else{
qDebug()<<"load dll fail.";
}
2011年2月23日 星期三
2011年2月9日 星期三
Qt 4.7 Tcp Socket Client 教學範例
首先在專案的.pro檔中要先加入
QT += network
接著在程式.h檔中加入
在程式.cpp裡
QT += network
接著在程式.h檔中加入
#include < QtNetwork/QTcpSocket >
//宣告一個QTcpSocket方便在整個程式中使用
QTcpSocket *m_socket;
在程式.cpp裡
//產生QTcpSocket物件
m_socket = new QTcpSocket(this);
//Connect事件觸發的Function
//在收到Server的訊息時會觸發readRead()
connect(m_socket,SIGNAL(readyRead()),this,SLOT(slotReadyRead()));
//連線成功的事件
connect(m_socket,SIGNAL(connected()),this,SLOT(slotConnected()));
//斷線的事件
connect(m_socket,SIGNAL(disconnected()),this,SLOT(slotDisConnected()));
//連線到Server
QString ip_address="127.0.0.1";
int port = 2266
m_socket->connectToHost(ip_address,port );
//傳送訊息
QTextStream stream(m_socket);
stream << "Server: Hi, I am client";
//接收訊息
m_socket->readAll();
參考網址
Qt Network Tutorial
http://www.qtforum.org/article/9/qt-network-tutorial.html
Blocking Fortune Client Example
http://2s22.ing.ula.ve/qt/network-blockingfortuneclient.html
How to write Socket program in Qt 4.7 for Mobiles?
http://discussion.forum.nokia.com/forum/showthread.php?217630-How-to-write-Socket-program-in-Qt-4.7-for-Mobiles
Qt Network Tutorial
http://www.qtforum.org/article/9/qt-network-tutorial.html
Blocking Fortune Client Example
http://2s22.ing.ula.ve/qt/network-blockingfortuneclient.html
How to write Socket program in Qt 4.7 for Mobiles?
http://discussion.forum.nokia.com/forum/showthread.php?217630-How-to-write-Socket-program-in-Qt-4.7-for-Mobiles
2010年8月23日 星期一
2010年7月13日 星期二
Qt 讀取MP3的ID3 tag
MP3資訊目前都是以ID3的tag標示
目前常見的標示有ID3v1, ID3v2.3, ID3v2.4
讀取方式大同小異但在v1和v2.3的編碼方式為Big5所以讀取時要比較注意一點
關於各欄位資訊可參照Wikipedia
http://en.wikipedia.org/wiki/ID3
下面提供簡單的讀取範例
QFile *file=new QFile(MP3檔案路徑);
if (!file->open(QIODevice::ReadOnly))
{
qDebug()<<"return";
return;
}
QTextCodec *codec = QTextCodec::codecForName("Big5");
QString head = file->read(3);
QString sver = file->read(1);
int ver = sver.at(0).toAscii();
//移到倒數第128個位置
file->seek(file->size()-128);
QString tag = file->read(3);
qDebug()<<"tag"<
QString title = codec->toUnicode(file->read(30));
QString artist = codec->toUnicode(file->read(30));
QString album = codec->toUnicode(file->read(30));
QString year = codec->toUnicode(file->read(4));
QString comment = codec->toUnicode(file->read(30));
qDebug()<<"head"<
qDebug()<<"ver"<目前常見的標示有ID3v1, ID3v2.3, ID3v2.4
讀取方式大同小異但在v1和v2.3的編碼方式為Big5所以讀取時要比較注意一點
關於各欄位資訊可參照Wikipedia
http://en.wikipedia.org/wiki/ID3
下面提供簡單的讀取範例
QFile *file=new QFile(MP3檔案路徑);
if (!file->open(QIODevice::ReadOnly))
{
qDebug()<<"return";
return;
}
QTextCodec *codec = QTextCodec::codecForName("Big5");
QString head = file->read(3);
QString sver = file->read(1);
int ver = sver.at(0).toAscii();
//移到倒數第128個位置
file->seek(file->size()-128);
QString tag = file->read(3);
qDebug()<<"tag"<
QString title = codec->toUnicode(file->read(30));
QString artist = codec->toUnicode(file->read(30));
QString album = codec->toUnicode(file->read(30));
QString year = codec->toUnicode(file->read(4));
QString comment = codec->toUnicode(file->read(30));
qDebug()<<"head"<
2010年6月23日 星期三
Qt 中文顯示亂碼解決方式
在main文件中添加代码:
#include < QTextCodec >
int main(int argc, char **argv)
{
....................
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
..........................
}
這樣就可以在其他地方使用中文字了
#include < QTextCodec >
int main(int argc, char **argv)
{
....................
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
..........................
}
這樣就可以在其他地方使用中文字了
2010年6月10日 星期四
QNetworkAccessManager 處理Http Command
在Qt 要做Http Command也可以用QNetworkAccessManager這元件
這元件還可以讓使用者保持登入狀態
使用方式
#include < QNetworkAccessManager >
#include < QNetworkReply >
//宣告
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
//收到Server回傳資料處理
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(decode(QNetworkReply*)));
//要求登入事件處理
connect(manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this,SLOT(authenticationResult(QNetworkReply*,QAuthenticator*)) );
//發出Http Command
QUrl url = new QUrl(Http_Command);
manager->get(QNetworkRequest(url));
這元件還可以讓使用者保持登入狀態
使用方式
#include < QNetworkAccessManager >
#include < QNetworkReply >
//宣告
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
//收到Server回傳資料處理
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(decode(QNetworkReply*)));
//要求登入事件處理
connect(manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this,SLOT(authenticationResult(QNetworkReply*,QAuthenticator*)) );
//發出Http Command
QUrl url = new QUrl(Http_Command);
manager->get(QNetworkRequest(url));
2010年5月28日 星期五
Qt 中解析 JSON 文件
在Qt中要解析JSON的文件有套相當方便的Libary可供使用
可以使用 apt-get install libqjson-dev直接安裝
網站上也有提供使用說明和範例
使用時要在.pro中加上
LIBS += -L/usr/lib -lqjson
程式中加入
#include < qjson/parser.h >
其他請參照說明網頁
http://qjson.sourceforge.net/usage.html
可以使用 apt-get install libqjson-dev直接安裝
網站上也有提供使用說明和範例
使用時要在.pro中加上
LIBS += -L/usr/lib -lqjson
程式中加入
#include < qjson/parser.h >
其他請參照說明網頁
http://qjson.sourceforge.net/usage.html
2010年5月27日 星期四
Qt Http Get 簡單實作
現在網路上很多資料可以直接上網取得最新的資訊
也有很多網站提供API可以使用
而使用方法大都是利用http直接存取
http Get的方式就是一種
一般最簡單的用法就是之前提到Google 天氣API那樣直接接在網址後面就可以了
像http://www.google.com/ig/api?weather=,,,22625108,120308954
可以取得天氣的資訊
那在weather就是一個變數而後面的,,,22625108,120308954是給這變數的值
可以用&接在後面然後加其他的變數
在Qt中要用到HTTP就需要include < QHttp > 和 < QUrl > 以及 < QFile >
簡單的範例如下
//QUrl 用來設定網址內容
QUrl url;
//輸入網址
url = QUrl("http://www.google.com/ig/api");
//加入變數和值
url.addQueryItem("weather",",,,22625108,120308954");
//QFileInfo檔案資訊(用來取得輸入網址後面的名稱)若自定名稱就不需要
QFileInfo fileInfo(url.path());
QString fileName = fileInfo.fileName();
if (fileName.isEmpty()) {
fileName = "index.html";
}
//QFile檔案(用來儲存得到的網頁內容)
file = new QFile(fileName);
if (!file->open(QIODevice::WriteOnly)) {
qDebug()<<"Unable to save the file";
delete file;
file = 0;
return;
}
//QHttp用來做Http的Connection
http = new QHttp(this);
//連結完成的事件...另有很多其他事件可用如狀態變更、連線、傳輸進度等
connect(http,SIGNAL(done(bool)), this, SLOT(test(bool)));
//設定連接的伺服器和port
http->setHost(url.host(), url.port(80));
//使用HTTP Get command
http->get(url.toString(), file);
//結束這http connection
http->close();
主要的程式就是這一部份其他的部分再依照需求加上即可
也有很多網站提供API可以使用
而使用方法大都是利用http直接存取
http Get的方式就是一種
一般最簡單的用法就是之前提到Google 天氣API那樣直接接在網址後面就可以了
像http://www.google.com/ig/api?weather=,,,22625108,120308954
可以取得天氣的資訊
那在weather就是一個變數而後面的,,,22625108,120308954是給這變數的值
可以用&接在後面然後加其他的變數
在Qt中要用到HTTP就需要include < QHttp > 和 < QUrl > 以及 < QFile >
簡單的範例如下
//QUrl 用來設定網址內容
QUrl url;
//輸入網址
url = QUrl("http://www.google.com/ig/api");
//加入變數和值
url.addQueryItem("weather",",,,22625108,120308954");
//QFileInfo檔案資訊(用來取得輸入網址後面的名稱)若自定名稱就不需要
QFileInfo fileInfo(url.path());
QString fileName = fileInfo.fileName();
if (fileName.isEmpty()) {
fileName = "index.html";
}
//QFile檔案(用來儲存得到的網頁內容)
file = new QFile(fileName);
if (!file->open(QIODevice::WriteOnly)) {
qDebug()<<"Unable to save the file";
delete file;
file = 0;
return;
}
//QHttp用來做Http的Connection
http = new QHttp(this);
//連結完成的事件...另有很多其他事件可用如狀態變更、連線、傳輸進度等
connect(http,SIGNAL(done(bool)), this, SLOT(test(bool)));
//設定連接的伺服器和port
http->setHost(url.host(), url.port(80));
//使用HTTP Get command
http->get(url.toString(), file);
//結束這http connection
http->close();
主要的程式就是這一部份其他的部分再依照需求加上即可
2010年5月19日 星期三
Qt DesktopWidget 判斷視窗大小變換
Qt提供了一個QtDesktopWidget讀取Desktop的一些事件和屬性
//使用前需include
#include < QtGui/QDesktopWidget >
//接著就是宣告
QDesktopWidget *mDesktop;
//指定desktop
mDesktop = qApp->desktop();
//讀取Window 寬高
width = mDesktop->width();
height = mDesktop->height();
//指定視窗變化事件
connect(mDesktop,SIGNAL(resized(int)),this,SLOT(resizedSlot(int)) );
2010年5月4日 星期二
2010年4月27日 星期二
Qt IM開發工具
說明
在Qt中IM 可以使用Telepathy這套libary
在Moblin也是同樣是用Telepathy, Telepathy是一個IM, 可以用DBus控制 Empathy就是一個Telepathy的Client
由於在Telepathy要用到DBus所以在Qt中使用時要在專案檔(.pro)加入 CONFIG += qdbus
參考網站
Telepathy-Qt4
http://telepathy.freedesktop.org/doc/telepathy-qt4/
Telepathy Developer's Manual
http://people.collabora.co.uk/~danni/telepathy-book/index.html
在Qt中IM 可以使用Telepathy這套libary
在Moblin也是同樣是用Telepathy, Telepathy是一個IM, 可以用DBus控制 Empathy就是一個Telepathy的Client
由於在Telepathy要用到DBus所以在Qt中使用時要在專案檔(.pro)加入 CONFIG += qdbus
參考網站
Telepathy-Qt4
http://telepathy.freedesktop.org/doc/telepathy-qt4/
Telepathy Developer's Manual
http://people.collabora.co.uk/~danni/telepathy-book/index.html
2010年4月21日 星期三
Qt 讀寫 XML
首先在專案檔要加入
QT += xml
不然會出現錯誤
建立XML
到這邊已經建立好基本的XML了
接下來就是將資料放入XML
這邊XML加入子節點和屬性的方法都有了剩下就是個人自己設計架構了
設計完了後要存檔
到這邊一個完整的XML就完成了
再來是要把檔案讀出來
這邊已經完成開檔動作
接著開始讀取內容
以上就是XML基本會用到的東西
QT += xml
不然會出現錯誤
建立XML
//建立Document
QDomDocument doc( "Favorite" );
//建立root
QDomElement root = doc.createElement( "favorite" );
//將root加入doc
doc.appendChild( root );
到這邊已經建立好基本的XML了
接下來就是將資料放入XML
//建立節點
QDomElement app = doc.createElement( "application" );
//設定節點屬性的“名稱”和“內容”
app.setAttribute( "name", "Skype" );
//將節點放到root下成為一個子節點
root.appendChild( app );
這邊XML加入子節點和屬性的方法都有了剩下就是個人自己設計架構了
設計完了後要存檔
QFile file( "favor.xml" );
//開檔
if( !file.open( QFile::WriteOnly | QFile::Text ) )
{
//設定錯誤訊息
}
//設定QTextStream
QTextStream ts( &file );
//資料寫入
ts << doc.toString();
//既然有開檔當然就要關檔
file.close();
到這邊一個完整的XML就完成了
再來是要把檔案讀出來
QDomDocument doc;
QFile file(favor.xml);
QString errorStr;
int errorLine;
int errorCol;
if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorCol))
{
//如果有錯在這邊處理
}
file.close();
這邊已經完成開檔動作
接著開始讀取內容
QDomNode root = doc.firstChild();
//檢查是否有子節點
if(root.hasChildNodes())
{
//取得所有子節點
QDomNodeList list=firstnode.childNodes();
//掃描所有子節點
for(int i = 0; i < list.count(); i++)
{
//取得第i個子節點
QDomNode node=list.at(i);
//節點名稱
qDebug() << node.nodeName();
QDomElement app = node.toElement();
//下面就是節點的屬性了
qDebug() << app.attribute("name");
}
}
以上就是XML基本會用到的東西
2010年4月16日 星期五
Qt 掃描目錄中的檔案
#include 《QDir》
QDir dir;
//設定要過濾的檔名
QStringList filters;
filters << "*.desktop";
//選擇目錄
dir.setPath("/usr/share/applications/");
//過濾檔案
dir.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
//檔案排序
dir.setSorting( QDir::Size | QDir::Reversed );
//過濾檔名
dir.setNameFilters(filters);
QFileInfoList list = dir.entryInfoList();
QFileInfo fi;
qDebug()<<"Bytes Filename";
for(int i = 0; i < list.count(); i++)
{
fi = list.at(i);
qDebug()《"file size:"《fi.size()《", file name:"《fi.fileName();
}
QDir dir;
//設定要過濾的檔名
QStringList filters;
filters << "*.desktop";
//選擇目錄
dir.setPath("/usr/share/applications/");
//過濾檔案
dir.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
//檔案排序
dir.setSorting( QDir::Size | QDir::Reversed );
//過濾檔名
dir.setNameFilters(filters);
QFileInfoList list = dir.entryInfoList();
QFileInfo fi;
qDebug()<<"Bytes Filename";
for(int i = 0; i < list.count(); i++)
{
fi = list.at(i);
qDebug()《"file size:"《fi.size()《", file name:"《fi.fileName();
}
2010年3月10日 星期三
Qt 教學網站
Infinite Loop
http://program-lover.blogspot.com/2008/08/qt.html
良葛格學習筆記
http://caterpillar.onlyfun.net/Gossip/index.html
用Qt中的QDomDocument Class處理 XML文件
http://www.cuteqt.com/blog/?p=247
http://program-lover.blogspot.com/2008/08/qt.html
良葛格學習筆記
http://caterpillar.onlyfun.net/Gossip/index.html
用Qt中的QDomDocument Class處理 XML文件
http://www.cuteqt.com/blog/?p=247
訂閱:
文章 (Atom)