1.在程式關閉視窗時,顯示提示視窗:
qt中有很多訊號和相應的槽函式,上述問題需要攔截關閉視窗資訊qwidget::close(),qwidget::closeevent( qcloseevent * event )重寫,即對**如下:
[cpp]view plain
copy
"font-family:simsun;font-size:13px;"
>
void
qwidget::closeevent ( qcloseevent * event )
else
if(button == qmessagebox::yes) }
2.在程式中開闢執行緒,需要在程式結束前結束執行緒,如果在程式中動態開闢了記憶體,需要考慮記憶體釋放問題:
(1).開啟執行緒, 如果程式中需要使用執行緒,可以通過自定義執行緒,繼承qthread,重寫qthread::run(),run()函式體內就是執行緒的執行過程,記得在函式最後加上事件迴圈qthread::exec(),再通過qthread::start()函式開啟執行緒。
(2).結束執行緒,先呼叫qthread::exit(),結束執行緒事件迴圈,再呼叫qthread::wait()來阻塞主程式知道執行緒結束執行。
補充: qt中當parent銷毀時,會自動delete child物件,而對於沒有parent的物件需要手動釋放。
3.訊號和槽問題:
(1).訊號是某個物件的訊號,槽也是某個物件的槽,訊號和槽通過qobject::connect()聯絡在一起,這個聯絡可以再很多地方都可建立,只要確定
再呼叫qobject::connect()函式前,該訊號和槽的物件已經存在。
(2).多執行緒間的通訊,也可以通過訊號和槽來實現。
4.qt可執行程式在他人電腦上執行顯示亂碼問題:
qt目錄plugins下的codecs資料夾下的內容是跟文字顯示有關,如果沒有這個,可能會出現中文亂碼等等一些問題,解決方法如下:
a. 在主程式main開始處增加以下語句,注意要按順序書寫:
b.程式其他地方,包括其他檔案、類檔案中,直接使用中文,建議還是用tr("中文形式"):
qstring str = tr("我是中文");c.在部署目錄(執行程式放置的目錄)中建立子目錄 plugins,之後在此目錄中建立codecs子目錄,將qcncodecs4.dll複製到此子目錄中(根據程式需要,有可能是codecs下的其他檔案),形成如下目錄結構:lbl1.settext(str);
lbl2.settext("你好,中文!");
d.大功告成!試試你的程式吧,漂亮的中文出現了!
其實plugins中還可以放置程式中使用的其他外掛程式,如sql和影象處理外掛程式(到qt安裝目錄下的qt\plugins下按目錄結構複製你所需要檔案的即可)。
5.qt載入檔案,及工程工作目錄與可執行檔案目錄的區別:
對於較大的程式,程式中可能會呼叫很多其它工程的dll或者需載入資訊,習慣上將可執行程式單獨放在乙個目錄下。
工作目錄:一般情況下是指程式工程目錄,而不是可執行程式所在目錄(一般在工程目錄中的debug目錄下)。
有的時候可執行程式需要脫離工程目錄,如將程式放在其它電腦上執行時,以下是將工作目錄設定成可執行程式目錄的**:
(1). qt獲得當前可執行程式目錄:qdir::currentpath();
(2).修改工作目錄:bool qdir::setcurrent( const qstring &path ) [static];
[cpp]view plain
copy
"font-family:simsun;font-size:13px;"
qdir::setcurrent(dir);
6.vs2010無法設定斷點問題:
the breakpoint will not currently be hit.
從選單欄的 tools->options->debugging->general
取消 "require source to exactly match..." 項的選擇。
還有兩個可能是
1. 開啟專案屬性,選擇除錯選項卡,將「啟用非託管**除錯」一項鉤上。
2. 由於terminal services 這個服務被禁用了,將這個服務設為自動,將這個服務啟動。
以上**:
對於單個斷點,可以右鍵—>location—>勾選「allow source code to be defferent」
7.qt主程式介面退出時,想要使程式退出:
一般情況下,當程式有多個視窗時,如果沒有關閉所有視窗,程式並不會終止,這是因為在視窗被建立時,預設將視窗的屬性設定為qwidget::setattribute( qt::wa_quitonclose,true),即表示程式退出的條件是設定這個屬性為true的所有視窗都退出。
8.qt+vs2010程式在其他為安裝vs2010環境的計算機上無法執行解決方案:
通過depends工具查詢程式依賴的dll,正常情況下,對於沒有安裝vs2010環境的計算機想要執行該程式,需要載入msvcp100.dll、msvcr100.dll、msvcp100d.dll、msvcr100d.dll,這幾個dll中100表示2010版。
9.qmainwindow控制項中心控制項自動新增滾動條,及對視窗標題欄上的最大、最小、關閉按鈕的設定:
[cpp]view plain
copy
qtextedit *edit =
newqtextedit;
edit->settext(tr("hello world"
));
edit->setgeometry(5,5,1000,800);
qscrollarea *area = new
qscrollarea;
setcentralwidget(area);
area->setwidget(edit);//只是中心部分,其餘自己自己補充
按鈕設定:
setwindowflags ( qt::windowflags type )
qt::framewindowhint:沒有邊框的視窗
qt::windowstaysontophint://總在最上面的視窗
qt::customizewindowhint://自定義視窗標題欄,以下標誌必須與這個標誌一起使用才有效,否則視窗將有預設的標題欄
qt::windowtitlehint:顯示視窗標題欄
qt::windowsystemmenuhint://顯示系統選單
qt::windowminimizebuttonhint://顯示最小化按鈕
qt::windowmaximizebuttonhint://顯示最大化按鈕
qt::windowminmaxbuttonshint://顯示最小化按鈕和最大化按鈕
qt::windowclosebuttonhint://顯示關閉按鈕
10.設定視窗為模式對話方塊或者非模式對話方塊:
qwidget :: void setwindowmodality( qt::windowmodality
windowmodality)
11.當用自定義資訊引數為自定義結構體時,顯示error:
qobject::connect: cannot queue arguments of type 'mediadbattirbute' (make sure 'mediadbattirbute' is registered using qregistermetatype().)
解決方法:
qregistermetatype("mediadbattirbute");
Qt專案中遇到的一些 小問題彙總
公司讓負責qt介面開發,但是接觸qt又不久,現將在專案中遇到的一些問題彙總下,一為了避免自己忘記,二希望能幫助到他人。1.在程式關閉視窗時,顯示提示視窗 qt中有很多訊號和相應的槽函式,上述問題需要攔截關閉視窗資訊qwidget close qwidget closeevent qcloseeven...
專案中遇到的一些小問題
question1.如何將bstr型別的字元轉換為小寫?bstr str 初始化 cstring tmp str str.makelower bstr t bstr tmp 這樣就可以了,bstr t只是對bstr的包裝而已,可以直接轉換 question2.如何獲取當前的登陸使用者名稱?wchar...
SpringMVC遇到的一些小問題
1 空指標 autowired private departmentdao departmentdao 出現該問題主要是忘記新增了 autowired註解 導致departmentdao未注入到employeedao中 從而出現departmentdao中的getdepartment id 方法不能...