自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實(shí)例 Qt 自定義控件捕獲鼠標(biāo)消息

移動(dòng)開發(fā)
GUI的廣泛應(yīng)用是當(dāng)今計(jì)算機(jī)發(fā)展的重大成就之一,他極大地方便了非專業(yè)用戶的使用人們從此不再需要死記硬背大量的命令,取而代之的是可以通過窗口、菜單、按鍵等方式來方便地進(jìn)行操作。

GUI 即人機(jī)交互圖形化用戶界面設(shè)計(jì)??v觀國際相關(guān)產(chǎn)業(yè)在圖形化用戶界面設(shè)計(jì)方面的發(fā)展現(xiàn)狀,許多國際知名公司早已意識(shí)到 GUI 在產(chǎn)品方面產(chǎn)生的強(qiáng)大增值功能,以及帶動(dòng)的巨大市場(chǎng)價(jià)值,因此在公司內(nèi)部設(shè)立了相關(guān)部門專門從事 GUI 的研究與設(shè)計(jì),同業(yè)間也成立了若干機(jī)構(gòu),以互相交流 GUI 設(shè)計(jì)理論與經(jīng)驗(yàn)為目的。

下午剛在qt中文論壇逛了下,發(fā)現(xiàn)有人提問說:能不能讓鼠標(biāo)一移動(dòng)到QlineEdit的控件上就觸發(fā)一個(gè)信號(hào),我想了想,覺得這是可行的,根據(jù)在windows上的經(jīng)驗(yàn),要想讓這樣的控件也來捕獲鼠標(biāo)之類的消息,可以是這樣做的:

自己從系統(tǒng)默認(rèn)的控件類里派生出自己的控件類來。其實(shí)這個(gè)這個(gè)類最主要的作用就是能讓自己來寫一些處理鼠標(biāo)之類的函數(shù),比方說在MFC里讓自己的這個(gè)控件類來增加對(duì)WM_MOUSEMOVE消息的處理函數(shù)。這樣鼠標(biāo)一移動(dòng)到控件上,我們自己的程序就能處理鼠標(biāo)的移動(dòng)消息了。

那么qt中能不能也這樣呢,翻了翻文檔,在Qwidget里發(fā)現(xiàn)有一個(gè)enterEvent()的函數(shù),文檔介紹說一旦鼠標(biāo)移動(dòng)到Qwidget的時(shí)候,enterEvent()這個(gè)函數(shù)將被調(diào)用。所以我們也可以從控件類里派生出來一個(gè)自己的控件類,然后自己實(shí)現(xiàn)enterEvent()函數(shù),在這個(gè)函數(shù)里發(fā)射一個(gè)信號(hào)。這就OK了。

大致代碼:

  1. class MyEdit:public QlineEdit  
  2. {  
  3.        Q_OBJECT  
  4.        public:  
  5.               MyEdit(QWidget * parent, const char * name);  
  6.               void enterEvent( QEvent * e);  
  7. };  
  8. MyEdit::MyEdit(QWidget * parent, const char * name):QLineEdit(parent,name)  
  9. {  
  10.        this->setText("11.11");  
  11. }  
  12. void MyEdit::enterEvent( QEvent * e)  
  13. {  
  14.        QString s = this->text();  
  15.        emit textChanged (s);  

我現(xiàn)在把textChanged (s)信號(hào)連接到一個(gè)顯示部件里,用QLCDNumber部件。

  1. class MyWindow:public QVBox  
  2. {  
  3.        public:  
  4.        MyWindow();  
  5.        private:  
  6.     MyEdit *        lineedit;  
  7.     QLCDNumber *       lcdnum;         
  8.  
  9. };  
  10.  
  11. MyWindow::MyWindow()  
  12. {  
  13.        QHBox* hbox1 = new QHBox(this);   
  14.        lineedit = new MyEdit(hbox1,0);  
  15.        QHBox* hbox2 = new QHBox(this);  
  16.        lcdnum = new QLCDNumber(hbox2);  
  17.        connect(lineedit,SIGNAL(textChanged ( const QString & )),lcdnum,SLOT(display ( const QString &)));  

主函數(shù):

  1. int main(int argc, char **argv)   
  2. {  
  3.        QApplication a(argc, argv);  
  4.        MyWindow w;  
  5.        a.setMainWidget(&w);  
  6.        w.setGeometry(500,200,200,150);  
  7.        w.show();  
  8.        a.exec();  

OK了

其實(shí)我覺得這是個(gè)經(jīng)驗(yàn)問題,像GUI程序,我覺得只是一些實(shí)現(xiàn)的類庫不一樣,比方說用qt的用qt,用MFC的用MFC,其實(shí)很多思路都會(huì)是差不多的。而只要你比較熟悉一種GUI庫了,其他的學(xué)起來都比較的輕松了。因?yàn)榈鹊侥阋环N庫搞得比較的熟悉了,GUI該有的些什么功能阿,控件阿,都比較熟悉了,我覺得就只剩下用什么用的庫來實(shí)現(xiàn)的問題了。這個(gè)時(shí)候只要有一份某種GUI庫的文檔。很多問題就號(hào)解決了。

 小結(jié):

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-05 18:51:51

QT 控件 鼠標(biāo)

2011-04-19 10:33:16

ASP.NET自定義控

2011-06-23 10:49:13

Qt 自定義信號(hào)

2013-04-19 10:14:24

2009-06-08 20:13:36

Eclipse自定義控

2010-09-14 16:47:23

SQL自定義函數(shù)

2017-04-21 14:27:21

Android控件QQ未讀消息

2017-02-17 09:37:12

Android自定義控件方法總結(jié)

2010-09-14 16:59:39

SQL自定義函數(shù)

2009-08-03 13:34:06

自定義C#控件

2015-02-11 17:49:35

Android源碼自定義控件

2009-08-03 13:39:46

C#自定義用戶控件

2019-06-10 10:08:16

Windows 10Windows鼠標(biāo)指針

2009-09-03 13:34:03

.NET自定義控件

2022-06-30 14:02:07

鴻蒙開發(fā)消息彈窗組件

2014-09-24 11:42:46

AndroidButton

2010-08-03 16:13:01

FlexBuilder

2015-01-22 15:59:07

Android源碼日期時(shí)間控件SelectTime

2009-07-28 09:32:41

ASP.NET自定義控

2009-08-10 14:16:59

ASP.NET自定義控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)