這兩天一直在寫qt,剛入門,也沒什麼好教材可以參考,只能是一邊寫,一邊百度,一邊請教。。
寫這個界面花了很長時間,遇到很多問題,可能是qt上一些常用的用法,但對於新手,卻不得不是一個坎。喫一塹長一智,以後一定會越寫越順的。
1.多界面
首先添加文件new----Qt---Qt designer from class---widget
在主窗口文件包含副窗口的頭文件:include"widget.h"
然後創建對象:Widget Aui;
調用副窗口就用Aui.exec();
或者Aui.show();
這兩者的區別是,用exec會阻塞,也就是會留在exec不會往下執行,而用show不會!!
2.鎖定當前窗口
這個簡單,在構造函數裏面調用
setModal(ok);
就ok了。。
3.將LineEdit裏的字符串轉化成數字
bool ok = 1;
tempu = ui->lineEdit_SetTmp->text();
temp = tempu.toInt(&ok,10);
4.窗口間數據傳遞
qDebug()<<setTmpUI.temp; //這裏的訪問用了. 而不是->
直接訪問類成員函數
5.事件過濾器!!!這個重要,困擾了很久
我想獲得光標在哪個LineEdit裏,以便我輸入顯示,但是用什麼信號都不好,最後用事件過濾器解決了。
事件過濾器可以用來監視對象
用C++ GUI Qt4上面的話:QObject實例在看到他自己的事件之前,可以通過設置另一個QObject實例來先監視這些事件。
首先在構造函數裏面添加 對目標對象調用installEventFiler()來監視對象:
ui->lineEdit_czry->installEventFilter(this);
ui->lineEdit_mjrq->installEventFilter(this);
ui->lineEdit_sxrq->installEventFilter(this);
ui->lineEdit_mjqh->installEventFilter(this);
ui->lineEdit_dyxh->installEventFilter(this);
ui->lineEdit_rqjz->installEventFilter(this);
然後聲明處理函數:
bool eventFilter(QObject *watched,QEvent *event); //
然後實現這個函數:
bool Setoption::eventFilter(QObject *watched,QEvent *event)
{
if (watched==ui->lineEdit_czry) //首先判斷控件(這裏指 lineEdit1)
{
if (event->type()==QEvent::FocusIn) //然後再判斷控件的具體事件 (這裏指獲得焦點事件)
{
flag=6;
}
else if (event->type()==QEvent::FocusOut) // 這裏指 lineEdit1 控件的失去焦點事件
{
}
}
......
return QWidget::eventFilter(watched,event); // 最後將事件交給上層對話框?????????
}