Qt 總結---打印機界面

這兩天一直在寫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);     // 最後將事件交給上層對話框?????????

}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章