天天看點

Qt中的一些知識小結(轉)

QCreator(2.5.0)安裝的時候已經不自帶MinGW,是以要自行安裝.當然我們也可以用VS的編譯器進行編譯,這樣裝了微軟的VS後我們在QtCreator中設定好微軟的編譯器目錄,然後在QtCreator中進行編寫代碼,編譯調試等.

Qt從源代碼編譯容易忽略的Perl問題

如何從源代碼編譯Qt,那就是編譯前先安裝Perl,因為裡面有些腳本是用Perl寫的,如果不安裝的話,在configure的時候會導緻這些腳本不能執行,是以會少複制很多檔案到指定的檔案夾,那麼編譯的時候就會出現“找不到檔案”之類的錯誤。這個是必須要安裝的,win下可以直接安裝activeperl即可。

Qt 3.x支援setMainWidget,但是Qt4已經取消了對setMainWidget的支援。

4.3之後就沒有了QVbox,取而代之的是QVBoxLayout類;

Qt中用來顯示圖檔的控件為Label後者用TextBrowser.當用Label顯示時,需要用setPixmap函數,且該函數對應傳入與圖像相關的參數為圖像的資料部分;當用TextBrowser顯示時,直接用append函數即可。該函數對應傳入與圖像相關的參數為圖像的檔案名(要包含路徑)。

顯示文本的控件為TextBrowser.

獲得spinBox的值是調用其value()函數。

獲得LineEdit的值是調用其text()函數,然後轉換成相應的資料類型即可。

.ui中的close函數隻是關閉視窗的顯示功能而已,并沒有delete掉裡面的變量。

 QPalette為調色版,其顔色組分為3組,活動組,非活動組.

可用組;其中活動組為目前視窗所在組,非活動組為其它視窗所在組,不可用組是由于某種原因暫時不能使用的組 。改變調色版的顔色可以使用setColor這個函數,這個函數有2個重載函數,其中參數ColorRole表示是更改哪個參數;比如說一般的背景色。

EditLine背景色顔色角色為QPalette::Base;前景色文字的顔色角色為QPalette::Text.

Button背景色顔色角色為QPalette::Button.前景色文字的顔色角色為QPalette::ButtonText.

Label前景文字顔色角色為QPalette::WindowText.

 當在TextBrowser中進行圖檔顯示時,如果需要讓顯示圖檔的視窗自适應圖檔的大小,可采用QTextBrowser下的setFixedWidth()和setFixedHeight()函數來設定視窗尺寸,其參數是從圖檔中擷取。當然這個設定的視窗長和寬已經包括了右邊和下邊的滾動條,是以給參數的時候需要把這2者考慮進去。

要對整個視窗的背景該色,且不改變其上面控件的背景色,則這時需用QPalette類。且時需用Window作為背景色角色;如果用Base作為背景色角色的話,那麼它隻會改變QTextEidt類及其派生類的背景色;如果用seStyleSheet,其用background-color的話,那麼它會把其上面的控件背景色全改了,且相應的子視窗的也都改了。

在Qt中,将1個數值a轉換成文本,可采用,tr(“%1”).arg(a).也可采用QString::number(a).

 實際運作到這幾句代碼時,并不是顯示完first,延時1s後顯示second,再延時1s後顯示third. 而是直接延時2秒,first,second,third同時顯示呢? 

setCentralWidget()函數是把控件布滿整個界面的語句。

 在Qt程式其中的一個函數中,如果需要調用另一個視窗類且顯示出來,則有2種方法。其一是在本類中定義一個全局變量,然後在這個函數中new一個對象。如下所示:

  void MainWindow::on_actionNew_Window_triggered()

  {

  my_dailog = new Dialog(this);

  my_dailog->show();

  }

  這種情況下建立的視窗時非模态的,且可以同時調出多個my_dialog視窗來。

  另外一種方法是在程式内部定義一個類對象,如下所示:

  Dialog my_dialog;

  my_dialog.setModal(false);

  my_dialog.exec();

  但是不管其模态設定是否為true,該視窗都是模态的,即該視窗顯示出來時其它的視窗不能工作了。當然此時隻能顯示1個my_dialog了。

  20. 如果想要視窗内部的控件大小随着視窗拉伸等變化而變化,則需要在布局中設定,點選ui檔案中的主體,然後選擇布局控件中滿足自己需求的一個即可。

  21. window下的路徑名需要用2個左斜杠或者1個右斜杆。即”/”或者””。

  22. 在界面中設定顯示的文字屬性,如果在cpp中被重新設定了,那麼運作時是以cpp中設定的最後的設定,因為這些屬性被覆寫掉了.

  23. 在Qt Designer界面設計中,label中顯示的内容各種屬性都可以設定,比如字型格式,顔色等.但是PushButton中顯示的字型在屬性欄就隻能更改其内容。如果要更改其它屬性則需要在代碼中實作。

  24. 一般信号中的toggled是指對應的屬性為checkable,然後被滑鼠單擊了下而發射的。這個在複選按鈕和單選按鈕中比較常見,但是在PushButton中也是可以用的,将PushButton的屬性checkable設定為真,則運作時滑鼠單擊一下,按鈕的顔色會變淡,再單擊一下又會變亮,它是以顔色的的深淺來提醒它的toggle的。

菜單欄中的一個選項,一般是用trigger來發射信号。

  25. Qt的MessageBox中比較常用的是,MessageBox::warning(),MessageBox::information,MessageBox:YES等。

  26. 在LineEdit中有一個echoMode,裡面可以選中password模式,則在LineEdit中輸入的内容對使用者是不可見的,當然對系統是可見的,我們可以将其内容讀取出來。

  27. Cmobo Box中增加一項用的是addItem()函數。例如:

ui->comboBox->addItem("China");

  28. Qt中QListView是基于Model的,QListWidget是基于Item的。

  29. 如果是用QListWidget的話,加入内容采用的是addItem()方法。

  30. 頭檔案和對應的源檔案可以同時include同一個頭檔案。

  31. 用滑動條觸發進度條的實驗中,至少有下面3種方法可以執行。

  可以直接在界面設計的信号與槽中連接配接好對應的信号與槽。無需任何代碼。

  在界面的構造函數中用connect函數連接配接好信号與槽,也無需其他代碼。如下:

  connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->progressBar, SLOT(setValue(int)));

  可以在滑動條值改變的槽函數中實作,如下:

  void Dialog::on_horizontalSlider_valueChanged(int value)

  ui->progressBar->setValue(ui->horizontalSlider->value());

  32. 讓狀态欄顯示文本不是采用setText()方法,而是采用showMessage().其第二個參數為顯示該内容持續的時間,以毫秒為機關。

  33. 如果在Qt Creator中需要帶參數運作,因為在main函數中經常有argv這個變量傳入參數,這可以在Qt Creator的左側Project一欄中—>Targets—>Desttop(中間偏上的位置)—>Run    —>Arguments中輸入需要附加的參數即可。

  34. QtextEdit除了用append()函數顯示圖檔外,還可以用insertHtml()函數和setPlainText()來顯示,用法類似,其中insertHtml()可以用來顯示圖檔和有格式的文字,而setPlainText()隻能用來顯示無格式的文字。

  35. Qt Gui界面的顯示是在程式的構造函數執行完後完成的,是以如果在構造函數中對界面有動态的輸出效果我們是看不到的,隻能都構造函數執行完了後才能看到最後的結果。那麼怎麼辦才能做到在構造函數結束時自動調用某一程式來完成我們想要看到的動态初始化效果呢?這裡可以使用QTimer下的singleShot()函數。

  36. Qtimer::singleShot(0, this, SLOT(event()));

  37. 其中第一個參數為時隔多長(機關為ms)執行後面的event信号函數,當然該函數的函數名可以自己定義。這句代碼的意思是立即執行執行event()函數。

和sleep()函數一樣,在Qt中也不能用opencv中的waitKey()函數來進行延時。

    

繼續閱讀