MFC到Linux+QT的移植


  1. MFC下的sleep()函數是以微秒為單位的,Linux下的speep()以秒為單位,usleep以微妙為單位;
  2. MFC下的ShowWindow()用於顯示窗口,QT中顯示窗口通過show()函數;
  3. MFC下的控件可以綁定一個變量(例如輸入控件),當綁定的變量修改值后,通過ShowWindow()可以更新到界面上,而QT上不需要綁定變量,直接通過控件的成員函數設置值后數據會自動更新到界面上;
  4. MFC中通過注冊回調函數將事件和函數綁定,當事件發生時會觸發注冊的回調函數,QT中通過信號/槽的方式實現類似功能;
  5. 如果你要在C中通過QT彈出對話框,首先需要新建一個QApplication app,然后新建一個對話框對象並調用show(),最后還需要執行app.exec()讓對話框進入QT的事件循環,此時對話框才能接收到QT事件以顯示對話框;
  6. 如果你要在C中在系統托盤區域旁彈出一個提示窗口,可能有些復雜,首先你需要新建一個QApplication app,然后新建一個QSystemTray tray並調用tray.show(),調用QTimer::singleShot()函數指定10ms(tray.show()后需要一段時間tray才能初始化完成,否則后面的調用可能無法正常顯示)后調用tray.showMessage()
  7. 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的插件可通過NPAPIQT/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. 以下為MFCQT中常用控件的對應關系:

 

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/,然 后運行基於QT4d 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控件資源不能正確回收;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM