《C GUI Qt 4 程式設計》 筆記(六)

2021-07-22 05:07:40 字數 4463 閱讀 3632

工具提示

findbutton->settooltip(tr("find next"));

newaction = new qaction(tr("&new"), this);

newaction->settooltip(tr("new document"));

狀態提示 顯示在狀態列上

newaction->setstatustip(tr("create a new document"));
what's this? 文字幫助

dialog->setwhatsthis(tr("
qwhatsthis::createaction();

當使用者按下f1鍵或單擊help選單項時,應用程式主視窗會呼叫help()槽

void mainwindow::help()

dir.cdup(); //上級目錄

qtextbrowser

qwidget::setattribute(qt::wa_deleteonclose)

// 通常模式對話方塊不允許和這個應用程式中的其他任何視窗進行互動

// 以下**允許這種互動

qwidget::setattribute(qt::wa_groupleader)

textbrowser->setsearchpaths(qstringlist() << path << ":/images");

textbrowser->setsource(page);

// 只要頁面發生改變,就會傳送sourcechanged()訊號

connect(textbrower, signal(sourcechanged(const qurl&)),

this, slot(updatewindowtitle));

textbrowser->documenttitle();

qt assitant庫

.pro

config += assistant

// 引數指定qt assistant程式所在路徑

// 空字串表示在path環境變數中查詢

qassistantclient* assistant = new qassistantclient("");

assistant->showpage(path);

第三部分 qt高階

第19章 unicode

qtextcodec::codecforlocale() 獲得本地字符集

讓應用程式感知翻譯

1. tr()

2. 程式啟動時,載入乙個翻譯檔案.qm

另一種方式:

lupdate工具

不要含有變數

應該這樣

qt_translate_noop("上下文", "***");

禁止const char* 到qstring的隱含轉換

在包含任意qt標頭檔案之前預先定義:

qt_no_cast_from_ascii

或在.pro中

defines += qt_no_cast_from_ascii

// 載入翻譯檔案
qlocale 提供本地化的數字和日期以及時間格式

翻譯應用程式:

1. 執行lupdate,從應用程式的源**中提取所有使用者可見的字串

2. 使用qt linguist翻譯應用程式

3. 執行lrelease,生成二進位制的.qm檔案,應用程式可以使用qtranslator載入這個檔案

在.pro中加入需要支援的語言

當第一次執行lupdate時會建立這兩個檔案xml格式

ts - translate source

qm - qt message

translations = spreadsheet_de.ts spreadsheet_fr.ts

lupdate -verbose spreadsheet.pro

codecfortr = ...

qtextcodec::setcodecfortr()

lrelease -verbose spreadsheet.pro

第19章 自定義外觀

三種方法重新定義qt內建視窗部件的外觀

1. 子類化視窗部件類

2. 子類化qstyle或者乙個預定義的風格比如qwindowstyle,qt通過這種方法為不同平台提供基於平台的外觀

3. qt樣式表 受css啟發

樣式表作用於上層的當前啟用的qstyle上,因為建立樣式表不引入任何子類,所以它們適合對現有視窗部件做微小的定製。

例如:想在應用程式中的所有qlineedit中使用黃色作為背景色

qlineedit

// 為整個應用程式設定乙個樣式表

lineedit->setstylesheet("background-color:yellow;");

qobject::setproperty()

qstyle

內建樣式類:

qstyle

|- qcommonstyle

|  |-qwindowstyle

|  |-qcleanlookstyle

|  |-qmacstyle

|  |-qplastiquestyle

|  |-qwindowsxpstyle

|  |-qwindowsvistastyle

||- qmotifstyle

|- qcdestyle

class mypushbutton : public qwidget

void mypushbutton::paintevent(qpaintevent* event)

drawcontrol()函式被各種qstyle的子類重新實現,用於繪製視窗部件

第20章 三維繪圖 opengl

1. 子類化qglwidget

2. 實現幾個虛函式

3. 連線qtopengl opengl庫

// 建構函式中

setformat(qglformat(qgl::doublebuffer | qgl::depthbuffer));

// 重寫qglwidget::initializegl()

qglclearcolor(qt::black);

glshademode(gl_flat);

glenable(gl_depth_test);

glenable(gl_cull_face);

// 重寫qglwidget::resizegl()

glviewport(0, 0, width, height);

glmatrixmode(gl_projection);

glloadidentity();

glfloat x = glfloat(width) / height;

glfrustum(-x, x, -1.0, 1.0, 4.0, 15.0);

glmatrixmode(gl_modelview());

// 重寫qglwidget::paintgl()

glclear(gl_color_buffer_bit | gl_depth_buffer_bit);

draw(); // 自定義函式,使用opengl函式繪圖

// 選擇滑鼠點處的面方法見書371頁

// main函式

if (!qglformat::hasopengl())

return 1;

mywidget win;

win.setwindowtitle(qobject::tr("title"));

win.resize(300, 300);

win.show();

.pro

qt += opengl

opengl qpainter結合

在paintevent()函式繪製

1. 建立乙個qpainter

2. 使用qpainter繪製背景

3. 儲存opengl狀態

4. 使用opengl操作繪製場景

5. 恢復opengl狀態

6. 使用qpainter繪製前景

7. 銷毀qpainter

qglwidget::rendertext()

使用幀快取物件生成疊加

基本思路:

1. opengl渲染到紋理

2. 將紋理繪製到視窗

3. 將選擇框繪製到視窗

假如只有視窗大小改變時才重新opengl渲染

這時,假如選擇框的大小改變,而視窗大小沒有改變時,則只需要繪製一張紋理和乙個選擇框,模型並不需要頻繁渲染。

C GUI qt4 第五章 學習筆記

1.numticks int std ceil max step std floor min step ceil floor round 都在math.h中。ceil 為向上取整,floor 為向下取整,round 為四捨五入。math.ceil 0.60 1 math.ceil 0.48 1 ma...

學習筆記 C GUI Qt4 第一章

開發環境 windows10 qt5.6.3 ide qt createor vs2013 include include intmain int argc,char ar 這裡未對qlabel進行delete操作,這樣一點記憶體洩漏問題無關大局,這部分內容是可以由作業系統重新 的 qlabel l...

《C GUI Qt4程式設計》第一章 Qt入門

1.1 hello qt 建立hello目錄,新建原始檔hello.cpp 進入hello目錄,qmake project生成乙個與平台無關的專案檔案hello.pro。然後輸入命令qmake hello.pro從專案檔案生成乙個與平台相關的makefile檔案。鍵入make命令就可以構建該程式了。...