由于工作需要, 開(kāi)始學(xué)習(xí)Qt. 這里記下一些筆記, 方便以后查閱(隨時(shí)更新).

1.用Qt Creator創(chuàng)建一個(gè)基于GUI的應(yīng)用程序, 選擇基類(lèi)有QWidget, QDialog, QMainWindow三種. 發(fā)現(xiàn)一個(gè)問(wèn)題, 當(dāng)選擇用QWidget, QDialog時(shí), 可以直接在派生類(lèi)的構(gòu)造函數(shù)里創(chuàng)建控件添加到布局管理器對(duì)象, 然后調(diào)用setLayout(布局管理器對(duì)象)就可以在界面顯示創(chuàng)建好的控件了; 然而選用QMainWindow作為基類(lèi)的時(shí)候, 這樣操作卻沒(méi)有顯示出控件來(lái). 經(jīng)過(guò)百度, 發(fā)現(xiàn)原來(lái)派生類(lèi)還要?jiǎng)?chuàng)建一個(gè)QWidget對(duì)象, 把布局管理器放到這個(gè)QWidget對(duì)象上面, 然后把這個(gè)QWidget對(duì)象作為參數(shù)調(diào)用setCentralWidget就可以正常顯示控件了.

2.解決Qt中顯示中文亂碼的方法, 這里直接添加兩個(gè)方法的調(diào)用:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

3.窗口樣式
setWindowFlags(Qt::FramelessWindowHint); //去掉窗口邊框標(biāo)題

4.md5加密
Qt中使用MD5加密
QCryptographicHash test(QCryptographicHash::MD5);
QByteArray data;
data.append(tr("test"));
test.addData(data);
QByteArray result = test.result();

result.toBase64(); //密文用base64編碼
result.toHex(); //用16進(jìn)制顯示數(shù)據(jù)

5.使用多線程
繼承QThread, 重寫(xiě)run虛方法, 如果使用線程事件循環(huán), 在run里面使用QObject對(duì)象并用connect關(guān)聯(lián)信號(hào), 需要在構(gòu)造函數(shù)里調(diào)用
moveToThread(this);否則slots槽還是在主調(diào)線程中被調(diào)用而不是在新創(chuàng)建的線程中執(zhí)行的.

6.
wchar_t* 轉(zhuǎn)QString

wchar_t* wptr = L"test";
QString ret = QString::fromWCharArray(wptr);
QString ret2 = QString((QChar*)wptr, wcslen(wptr));

QString 轉(zhuǎn)wchar_t*
wchar_t szBuf[1024];
QString str = tr("hello");
wcscpy_s(reinterpret_cast<wchar_t*>(szBuf),
sizeof(szBuf) / sizeof(wchar_t),
reinterpret_cast<const wchar_t*>(str.utf16()));

7.
QTreeView 設(shè)置列寬度固定
QTreeView()::header()->setResizeMode(QHeaderView::Fixed);

8.對(duì)話框屏幕居中顯示
quint32 scrwidth = QApplication::desktop()->width();
 quint32 scrheight = QApplication::desktop()->height();
 quint32 width = this->width();
 quint32 height = this->height();
 this->move((scrwidth - width) / 2, (scrheight - height) / 2);

9.發(fā)送信號(hào)的時(shí)候, 一些類(lèi)型作為參數(shù), 需要注冊(cè):
Q_DECLARE_METATYPE(類(lèi)名)
qRegisterMetaType<類(lèi)名>("類(lèi)名");
類(lèi)名也可以是結(jié)構(gòu)體等其他結(jié)構(gòu)

10.rcc資源文件
bin目錄下有個(gè)rcc.exe工具, 可以吧qrc腳本編譯成rcc資源2進(jìn)制文件, 命令如下:
rcc -binary xxx.qrc -o xxx.rcc

在程序中引用這個(gè)rcc資源文件:
QResource::registerResource("xxx.rcc");
卸載
QResource::unregisterResource("xxx.rcc")