- MFC下的sleep()函數是以微秒為單位的,Linux下的speep()以秒為單位,usleep以微妙為單位;
- MFC下的ShowWindow()用於顯示窗口,QT中顯示窗口通過show()函數;
- MFC下的控件可以綁定一個變量(例如輸入控件),當綁定的變量修改值后,通過ShowWindow()可以更新到界面上,而QT上不需要綁定變量,直接通過控件的成員函數設置值后數據會自動更新到界面上;
- MFC中通過注冊回調函數將事件和函數綁定,當事件發生時會觸發注冊的回調函數,QT中通過信號/槽的方式實現類似功能;
- 如果你要在C中通過QT彈出對話框,首先需要新建一個QApplication app,然后新建一個對話框對象並調用show(),最后還需要執行app.exec()讓對話框進入QT的事件循環,此時對話框才能接收到QT事件以顯示對話框;
- 如果你要在C中在系統托盤區域旁彈出一個提示窗口,可能有些復雜,首先你需要新建一個QApplication app,然后新建一個QSystemTray tray並調用tray.show(),調用QTimer::singleShot()函數指定10ms(tray.show()后需要一段時間tray才能初始化完成,否則后面的調用可能無法正常顯示)后調用tray.showMessage()。
- QT中獲取網卡硬件地址和IP地址的方法可使用如下代碼:
foreach (QNetworkInterface interface, QNetworkInterface::allInterfaces()) { qDebug() << interface.hardwareAddress() << ", flags:" << interface.flags(); foreach (QNetworkAddressEntry entry, interface.addressEntries()) { qDebug() << entry.ip(); } }
Flags中包含一些標志信息,包括是不是回環網絡,網卡是否啟動等;
8. IE的插件為ocx插件,在linux下要實現firefox的插件可通過NPAPI和QT/C++交互,目前在firefox 52 上可支持,新版本不一定能支持,例子請點擊鏈接https://github.com/qtproject/qt-solutions/tree/master/qtbrowserplugin,將編譯出來的庫拷貝到/usr/lib/mozilla/plugins/目錄下,訪問自帶的實例網頁即可;
9. Linux下保證進程唯一性的方式可通過如下方式實現:
a) 應用啟動時判斷/var/run下是否存在appname.pid文件,如果存在則繼續步驟b,若不存在則創建.pid文件;
b) 讀取文件中的進程號,獲取進程號后判斷此進程是否存在,若存在,退出程序;
c) 若進程不存在,獲取本進程號並寫入.pid文件,程序繼續執行;
10. MFC中調用AfxMessage()和messagebox()彈出提示對話框,QT中使用QMessageBox()彈出提示對話框,可自定義函數messagebox(),函數中通過QMessageBox()彈出對話框;
11. 以下為MFC和QT中常用控件的對應關系:
|
MFC |
QT |
單行顯示標簽 |
|
QLabel |
單行文本輸入框 |
CEdit |
QLineEdit |
按鈕 |
Button |
QPushButton |
組合框 |
CComboBox |
QComboBox |
對話框 |
CDialogEx |
QDialog |
系統托盤 |
NOTIFYICONDATA |
QSystemTray |
字符串 |
CString |
QString/string |
指針 |
HANDLE |
void * |
定時器 |
CTime |
QTimer |
12. MFC中提供了CIPAddressCtrl控件用於輸入並顯示IP地址,QT中沒有提供此類插件,如有需要,可從如下網址下載:
https://github.com/lizhenneng/IPv4Edit.git
可支持QT4/QT5,編譯后放入/usr/lib/x86_64-linux-gnu/qt5/plugins/designer/,通過 qtcreator 打開設計器,即可在左側控件欄看到IPv4Edit控件,如果是在QT4中使用此 控 件,則 qtcreator也需要基於QT4運行,否則在qtcreator的設計器左側控件欄中 不顯示此控件, 但程序運行的時候會顯示,若一定需要在設計器中顯示此控件,可以 現將基於 QT4編譯 的控件拷貝到/usr/lib/x86_64-linux-gnu/qt4/plugins/designer/,然 后運行基於QT4的d esigner打開界面文件即可顯示此控件。
13. 如果要獲取當前程序的工作路徑,在QT中可調用QDir::currentPath()獲取;
14. 在數據加解密及傳輸過程中,一般使用base64格式傳輸數據,QT中提供的QByteArray::fromBase64()及QByteArray::toBase64()可方便進行普通格式和base64格式之間的轉換;
15. 對於設備的熱插拔(如ukey),可通過netlink socket方式監聽內核的插拔事件;
16. 通過進程名獲取進程號可直接遍歷/proc文件系統;
17. Firefox可使用~/.mozilla/firefox/profiles.ini及對應Path路徑下的prefs.js來配置,如果需要一個更高優先級的配置文件,可在Path指定路徑下創建user.js並添加配置參數以覆蓋prefs.js中的配置;
18. QT資源的回收,可在退出應用時使用qApp::quit(),QT控件對象會按照自己的方式回收界面資源,請不要使用系統函數exit(),使用此方式會導致QT控件資源不能正確回收;