Qt知識(多看幾遍)

1.tr("內容")函數:將內容翻譯成其他語言的標準,用于軟件改變語言。(是一種不錯的編程風格)。
2.在字符串中用"&"來設置快捷鍵,如:"&Find"則快捷鍵為alt+f。
3.setBuddy()用來邦定伙伴 可以達到聚焦的目的。
4.setDefault(true)讓對應控件為默認的控件,即當按下Enter鍵時默認按下對應控件
5.sizeHint()返回一個窗口理想的尺寸大小
6.emit 執行指定信號
7.一個信號可以連接多個槽:在發射這個信號的時候,會以不確定的順序一個接一個的調用這些槽
8.多個信號可以連接同一個槽:不管發射哪個信號,都會調用這個槽
9.一個信號連接另一個信號:當發射第一個信號的時候,也會發射第二個信號
10.連接可以用disconnect移除
11.信號成功連接到槽,需要他們的參數必須具有相同的順序和相同的類型。有個例外,當信號的參數比他連接的槽的參數多,那么多余的參數會被忽略掉
12.創建對話框的基本步驟:
1)創建并初始化子窗口部件;
2)把子窗口部件放到布局中;
3)設置Tab鍵順序;
4)建立信號與槽的連接;
5)實現對話框中的自定義槽;
13.圖形用戶界面(GUI)為程序提供圖片的方法:
1)把圖片保存在文件中,運行是載入;
2)把XPM文件包含在源代碼中(因為XPM文件也是有效的C++文件);
使用Qt的資源機制;
14.Qt資源文件是一種簡單的XML文件格式
15.Qt通過“動作”的概念進行菜單和工具欄的編程,一個動作就是一個可以添加任意數量的菜單和工具欄上的項步驟為:
1)創建并且設置動作;
2)創建菜單并且把動作添加到菜單上;
3)創建工具欄并且把動作添加到工具欄上;
16.讓對話框以非模態(應用程序之間互不相干)的形式顯示用show、raise、activteWindow。對話框以模態(必須點擊關閉,才能操作其他應用程序)形式顯示用exec。
17.QSplashScreen 用來在程序啟動前的啟動畫面
18.QDataStream類用于寫入和讀出二進制流,QTextStream用于寫入和讀出文本也可以用前面的類
19.QApplication::clipboard()可以使用系統的剪貼板
20.自定義Qt窗口或者窗口部件可以選擇一個合適的Qt類,對它進行子類化,并且通過重新實現一些虛函數來改變它的行為。如果想對已經存在的窗口部件的外觀進行自定義設置,那么只需要對其應用一個樣式表或者重新實現一種定義風格即可,而不必對其進行子類化。
21.繪制事件在窗口第一次顯示的時候回自動產生,在重新調整部分或整體部件大小時回產生。也可以通過QWidget::update()或者QWidget::repaint()來強制產生繪制事件,區別是repaint會強制一個即時的重繪事件,而update是在Qt下一次處理事件時簡單的調用一個繪制事件,可以把多次的繪制事件壓縮在一次不會出現閃爍現象。
22.在QT設計師中使用自定義窗口部件之前必須讓QT設計師察覺到它們的存在,有兩種方法可以完成這一任務:改進法和插件法
1)改進法是最快捷和簡單的方法,如插入一個HexSpinBox部件的步驟:
a)從Qt設計師的窗口部件工具盒中拖動一個QSpinBox到窗體中創建一個QSpinBox
b)右鍵單擊微調框,從上下文菜單中選擇Promote to Custom Widget(改進成自定義窗口部件)
c)在彈出的對話框中填入HexSpinBox作為類的名字,填入hexspinbox.h作為頭文件的名字
缺點:無法對自定義窗口部件中的那些特定屬性進行訪問,也無法對這個窗口部件自身進行繪制
2)插件法需要創建一個插件庫,QT設計師在運行的時候加載這個庫,并可以利用該庫創建窗口部件的實例。(由于Qt的元對象系統,QT設計師可以動態獲取它的屬性列表)
23.雙緩沖:是一種圖形用戶界面編程技術,它包括把一個窗口部件渲染到一個脫屏像素映射中,以及把這個像素映射復制到顯示器上。當窗口部件的繪制非常復雜并且需要練血不斷地重復繪制的時候,明確的指定使用雙緩沖是非常有用的。
24.圖形處理或者圖形繪測窗口部件最好使用可以獲取的第三方窗口部件如:GraphPak,KD Chart,Qwt
25.Qt中用于窗口中擺放部件的類:QHBoxLayout、QVBoxLayout、QGridLayout和QStackLayout
26.管理窗體上子窗體部件布局的方法有三種:絕對位置法、人工布局法和布局管理器法。
1)絕對位置法:通過對子窗體部件分配固定的大小和位置以及對窗體分配固定的大小來實現
缺點:a)用戶無法改變窗口的大小
b)出現大字體時會把一些文本截斷
c)對于不同的平臺會出現尺寸不合
d)必須人工計算這些位置和大小
2)人工布局法:窗體部件位置絕對但是大小尺寸可以和窗口的大小成比例,通過重新實現窗體的resizeEvent()函數來設置部件的幾何形狀。
a)也會出現文本截斷的問題,通過考慮窗口部件的大小提示可以避免這種風險,但編碼會更復雜
3)布局管理器法:QHBoxLayout、QVBoxLayout、QGridLayout常用的三個布局管理器
27.QSizePolicy包含一個水平方向和一個垂直分量,通過它設置不同的取值可以設置窗口部件的大小策略
28.分組布局:QStackedLayout類可以對一組子窗口部件進行擺放或者分頁顯示而且一次只顯示其中一個把其他的隱藏起來。
29.切分窗口:QSplitter是一個可以包含其他窗口部件的窗口部件,在切分窗口中的這些窗口部件會通過切分條而分割開。用戶可以通過拖動切分條來改變部件的大小。
30.滾動區域:QScrollArea提供了一個可視的滾動的視口和兩個滾動條。
31.停靠窗口和工具欄:QMainWindow提供了4個停靠窗口區域分別在中央窗口部件的上部、下部、左側和右側。每個停靠窗口但是QDockWidgetd的實例。
32.多文檔界面:在主窗口的中央區域提供多個文檔(MDI應用程序),通過把QMdiArea類作為中央窗口部件,并且通過讓每一個文檔窗口都成為這個QMdiArea的子窗口部件,就可以創建一個多文檔界面應用程序。setCentralWidget()設置主窗口。
33.QTimer::singleShot(0,this,SLOT(loadFiles()));在構造函數的最后設置時間間隔為0毫秒,用來調用loadFile()函數。意味只要構造函數結束,同時主窗口顯示出來就調用loadFile()函數,這樣不會因為加載文件太大屏幕上看不任何東西。
34.代碼編輯的組件可以用QScintilla。
35.創建事件過濾器的步驟:
1)通過對目標對象調用installEventFilter()來注冊監視對象
2)在監視對象的eventFilter()函數中處理目標對象的事件
36.Qt提供的5個級別的事件處理和事件過濾方法:
1)重新實現特殊的事件處理器
2)重現實現QObject::event():可以在這些事件到達特定的事件處理函數之前處理他們,如覆蓋Tab件的默認意義
3)在QObject中安裝事件過濾器:對象一旦使用installEventFilter()注冊過,就會先發送給監視對象的eventFilter()函數。安裝順序和激活順序逆向
4)在QApplication對象中安裝事件過濾器:它可以用來處理那些發送給失效窗口部件的鼠標事件,因為QApplication通常都會忽略這些事件。
5)子類化QApplication并且重新實現notify()
37.處理密集時的響應保持:在程序的處理過程中因為一些事件的處理時間太長導致應用程序不能響應來著窗口的其他事件形成無法響應的狀況。這種情況的解決方法有:
1)使用多線程:一個線程來處理應用程序的用戶界面事件,將一些耗時操作用另外的線程來處理。
2)在耗時操作里面頻繁的調用QApplication::processEvents()函數告訴Qt處理那些還沒處理的事件。
3)利用進度條提示用戶正在進行某個延時操作
4)將耗時操作推遲到應用程序空閑的時候來處理,要求該處理可以被安全中斷后繼續。在Qt中使用一個0毫秒定時器就可以實現這種方法,只要在沒有其他尚待處理的事件就可以觸發這個定時器。
38.QPainter類用于二維圖形,OpenGL是一個繪制三維圖形的標準庫。
39.想在窗口部件上繪圖需要創建一個QPainter再將指針傳到該窗口部件。QPainter的主要設置:
1)畫筆用來畫線和邊緣
2)畫刷用來填充幾何形狀的圖案
3)字體用來繪制文字
40.Qt支持三種類型的漸變:線性漸變、錐形漸變、輻射漸變。
1)線性漸變:由兩個控制點定義,連接這兩個點的線上有一系列的顏色斷點
2)輻射漸變:由一個中心點、半徑、一個焦點以及顏色斷點定義
3)錐形漸變:由一個中心點和一個角度定義
41.世界變換:是在窗口和視口轉換之外使用的變換矩陣,它允許移動、縮放、旋轉和拉伸。坐標變換的簡單方式是使用QPainter的translate()、scale()、rotate()、shear()函數
42.qBound(0, secs, MaxSeconds)等價于if(secs < 0){secs=0}esle if(secs > MaxSecond){
secs = MacSecond}
43.在繪圖中,如果需要處理幾個到幾萬個項的時候,而且要求用戶能單擊、拖動和選取。Qt的視圖包括一個由QGraphicsScene充當的場景和一些由QGraphicsItem的子類充當場景中的項。場景以及項在視圖中顯示,它由QGraphicsView類充當。同一個場景可以在多個視圖中顯示,方便顯示一個大的場景,或者以不同的變換來顯示場景。
44.QGraphicsScene是一個圖形項的集合。一個場景有三層:背景層、項層和前景層。前景層和背景層通常由QBrush指定,但也有可能需要重新實現drawBackground()和drawForeground(),以便可以完全控制如果想用一個圖片作背景,可以簡單的創建圖片作為QBrush紋理。
45.視圖體系提供了兩種分項的方法。一種方法是簡單的使一個項成為另一個項的子項。另外一種方法是使用QGraphicsItemGroup。把一個項添加到組中不會引起任何變換,這些組可以方便的處理大量的項,就像它們是一個單獨項一樣。
46.QGraphicsView是一個窗口部件,這個窗口部件可以顯示場景,在需要的情況下可以提供滾動條,以及影響場景繪制方式的變換能力。有利于支持縮放和旋轉,幫助瀏覽場景。
47.默認情況下QGraphicsView使用Qt的內置二維圖形繪圖,可以通過setViewport()改為使用OpenGL窗口部件。
48.視圖體系使用三種不同的坐標系統:視口坐標、場景坐標和項坐標,喊包含一個坐標系統映射到另一個坐標的函數。視口坐標是QGraphicsView的坐標,場景坐標是邏輯坐標,用來布置場景中的項。項坐標針對某一項,并且以(0,0)點為中心。
49.QGraphicsItem不是QObject的子類,但如果需要在Link類中添加信號和槽,可以使用QObject做多重繼承。
50.QStyleOptionGraphicsItem是Qt的有個不尋常的類,因為提供了幾個公有的成員變量,可以檢查這些狀態變量來確定節點是否被選中
51.將視圖的拖動模式設置為QGraphicsView::RubberBandDrag,以為著用戶可以通過圈選選中item
52.場景中所有被選中的Item可以通過調用QGraphicsScene::selectedItems()獲得
53.setDragMode(ScrollHandDrag)設置拖動模式可支持通過鼠標拖動來滾動屏幕
54.Qt中打印的創建步驟:
1)創建一個當作繪制設備的QPrinter
2)彈出一個QPrintDialog對話框,以允許用戶選擇打印機并進行設置
3)創建一個在QPrinter上操作的QPainter
4)使用QPainter繪制一頁
5)調用QParinter::newPage()來進行下一頁繪制
6)重復4,5直到所有頁都被打印為止
QPrinter也可以通過調用setOutputFormat(QPrinter::PdfFormat)來生成PDF文件
55.在Qt中有兩種方式處理多頁文檔:
1)可以把數據轉換為HTML,并且使用Qt的富文本引擎QTextDocument進行顯示
2)可以執行繪制并且手動分頁
56.使拖動生效:QWidget的dragEnerEvent()和dropEvent()函數,當用戶把一個對象拖到窗口部件上時就會調用dragEnterEvent(),對這個事件調用acceptProposedAction(),就表明用戶可以在窗口上拖放對象。當用戶放下一個對象時就會調用dropEvrnt()。
57.如果想拖動純文本、超文本、圖像、URL和顏色,只使用QMimeData類就可以實現。但想拖動自定義數據就必須選擇如下三種方式這一。
1)使用QMimeData::setData()可以提供任意數據作為QByteArray的內容,并且在隨后利用QmimeData()提取這些數據
2)可以通過子類化QMimeData并且重新實現formats()和retrieveData()來處理自定義數據類型
3)對于在簡單應用程序中的拖放操作,可以子類化qMimeData并且利用我們所需要的任意數據結構來存儲數據
58.qobject_cast<T>():檢查是否可以成功的將一個類型的對象轉換為其他類型的對象
59.利用Qt的模型/視圖架構,我們可以從模型中獲取實際在視圖中顯示所需要的數據,這樣可以出來非常大的數據集,不會降低性能。如果決定改變底層數據集的儲存方式,則只需要修改模型
60.<QtAlgorithms>的頭文件聲明了在容器類上實現基本算法的一套全局模板函數
61.數據庫與tableview操作。QSqlTableModel、QSqlRelationalTableModel、QDataWidgetMapper
1)QDataWigetMapper將一個數據庫記錄字段反映到其映射的窗口部件中,同時將窗口部件中所做出的更改反映會數據庫,自動完成,setSubmitPolicy(QDataWidgetMapper::AutoSubmit)
62.創建線程只需要子類化QThread并且重新實現它的run()函數就可以了
63.多線程中一個最基本的要求就是能實現幾個線程的同步操作,Qt中提供了以下幾個用于同步的類:QMutex、QReadWriteLock、QSemaphore和QWaitCondition。
1)QMutex類提供了一種保護一個變量或者一段代碼的方法,用lock()函數來鎖住互斥量
2)QReadWriteLock是一個同步類,用在多個線程對共享數據進行讀寫時候的同步
3)QSemaphore是互斥量的另一種形式,可以用于保護一定數量是相同資源
4)QWaitCondition允許一個線程在滿足一定的條件下觸發其他多個線程
63.QThreadStorge<T>的一種常見用法是用于高速緩存中,通過在不同線程中擁有一個獨立的高速緩存,就可以避免用于鎖住、解鎖和可能等待一個互斥量的計算開銷
64.QObject是可重入的,但是必須記住它的三個約束條件
1)QObject的子對象必須在它的父對象線程中創建
2)在刪除對應的QThread對象之前,必須刪除所有在次線程中創建的QObject對象
3)必須在創建QObject對象的線程中刪除他們
65.QFtp提供了一些FTP指令,包括connectToHost()、login()、close()、list()、cd()、get()、put()、remove()、mkdir()、rmdir()、rename()
66.QHttp類是異步工作的,可以保證用戶界面始終保持響應
67.TCP是一個基于流的協議,在TCP之上建立的高層協議通常是基于行或者基于快的
1)基于行的協議吧數據作為一行文本進行傳輸,每一數據行都以一個換行符結尾
2)基于塊的協議把數據作為二進制塊進行傳輸,每個數據塊都是由一個大小字段及其包含的數據組成的
68.QTcpServer的incomingConnection()函數,當有一個客戶端試圖連接到服務器正在監聽的端口的時候就會調用
69.對與一般的XML數據處理,Qt提供了QtXML模板,QtXml提供了三種方式編程接口來讀取XML文檔:
1)QXmlSreamReader是一個用于讀取格式良好的XML文檔的快速解析器
2)DOM(文檔對象模型)把XML文檔轉換為應用程序可以遍歷的樹形結構
3)SAX(XML簡單應用程序編程接口)通過虛擬函數直接向應用程序報告“解析事件”
對于XML文件的寫入,Qt也提供了三種可用的方法:
1)使用QXmlStreamWriter
2)在內存中以DOM樹的結構表示數據,并要求這個樹形結構將自己寫到文件中
3)手動生成XML
70.工具提示、狀態提示和“What's This?”幫助
1)可以使用QWidget::setToolTip()以代碼的形式為任意窗口部件添加工具提示:
例如:findButton->setToolTip(tr("Find next"));
2)在我們需要為一個復雜對話框中的每一個字段提供說明性的文本,而不是強制用戶調用一個單獨的幫助窗口的時候,“What's This?”模式的針對這個問題的一個理想解決方案
例如:dialog->setEhatsThis("");
3)利用Web瀏覽器提供在線幫助:需要考慮瀏覽器引擎是否支持
例如:
void MainWindow::help()
{
QUrl url(directoryOf("doc").absoluteFilePath("index.html"));
url.setScheme("file");
QDesktopServices::openUrl(url);
}
4)將QTextBrowser作為簡單的幫助引擎
5)使用Qt Assistant提供強大的在線幫助:
Qt應用程序和Qt Assistant之間通信是由QAssistantClient類來處理的,它位于一個單獨的庫中,必須在應用程序的.pro文件中添加如下命令行:
CONFIG += assistant
6)使用與平臺相關的方法來提供在線幫助
————————————————
版權聲明:本文為CSDN博主「符丙虹」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_37086007/article/details/82725478

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容