qt學習記錄-----從Qt4到Qt5安裝、程序遷移和發佈

如下內容引用於Qter開源社區(www.qter.org),做者yafeilinuxhtml

http://www.qter.org/thread-903-1-1.htmllinux

 

1. .pro 項目文件增長新的語句
       greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
        這條語句的含義是,若是QT_MAJOR_VERSION 大於4 (也就是當前開發使用的是Qt 5 及更高版本),須要增長widgets 模塊。
        Qt 4 中,Qt 提供的所有圖形界面相關類都包含在Qt Gui 模塊。Qt 5 將一些圖形界面類移動到了Qt Widgets 模塊。因此在具備圖形用戶界面的應用程序中,須要增長這個模塊。如今建立的程序所使用的部件都在全新的Qt Widgets 模塊中,而不是Qt 4 時的Gui 模塊。因此在Qt Creator 建立新項目時,能夠看到名稱由之前的「Gui 應用」修改成瞭如今的「Widgets Application 」。
        若是項目僅須要支持Qt 5 ,也能夠直接添加QT += widgets 一句。不過爲了保持代碼兼容,最好仍是按照這裏這樣編寫。
 
2.  修正代碼中的include 語句
      
       Qt 5 添加了一些新的頭文件,而且將之前Qt Gui 模塊的某些頭文件改爲Qt Widgets 模塊。這個改變仍是因爲Qt 5 中將圖形部件從Qt Gui 模塊剝離開來,放到了全新的Qt Widgets 模塊中的緣故。例如,Qt 4 中使用的
       #include <QtGui/QApplication>
        語句,須要更改成:
       #include <QtWidgets/QApplication>
        不過,還有另一種更好的方式,它在Qt 4 Qt 5 中都適用。那就是直接使用類名:
       #include <QApplication>
        除此以外,在使用一些類時發生了編譯錯誤,則可能須要添加更多的頭文件。例如在Qt 4 中,能夠直接使用下面的語句:
        QDrag *drag = new  QDrag(event->widget());
        可是在Qt 5 中,這個語句將會出錯。由於QDrag 位於Qt Gui 模塊,而語句中的QDrag 使用了QWidget 類。在Qt 4 中,QWidget 一樣位於QtGui 模塊,可是在Qt 5 中,QWidget 被移動到Qt Widgets 模塊。所以爲了讓這條語句經過編譯,須要額外添加QWidget 頭文件:
       #include <QWidget>
 
3. Qt 5 關於中文顯示的問題
       Qt 5 移除了在Qt 4 中極具爭議的QTextCodec::setCodecForTr QTextCodec::setCodecForCStrings 等函數,也就是說,在Qt 5 中,不能繼續使用下面這種經過設置字符編碼的方法來顯示中文:
       QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
       QLabel *label = new QLabel(this);
       label->setText(tr("你好Qt!"));
       Qt 5 要求源代碼文件統一使用UTF-8 編碼。所以,若是須要簡單地顯示中文,只需像這樣編碼:
       label->setText("Hello World! 你好Qt!");
        可是考慮到開發後期國際化的工做,最好爲須要顯示到界面上的字符串添加tr 函數:
       label->setText(tr("Hello World! 你好Qt!"));
        可是這裏還要提醒讀者,儘可能不要直接在程序中使用中文字符串,而且tr 函數中也不該該出現除英文以外的其它語言字符。建議只使用英文設置程序中全部直接面向用戶的字符串,而且將這些字符串所有包含在tr 函數中。當須要顯示成中文時,使用國際化機制完成。
相關文章
相關標籤/搜索