如何让鼠标移动到QT控件上就触发信号

 我来答
天堂笑丶凑螷
2012-11-10 · 超过71用户采纳过TA的回答
知道答主
回答量:140
采纳率:100%
帮助的人:63.9万
展开全部
下午刚在qt中文论坛逛了下,发现有人提问说:能不能让鼠标一移动到QlineEdit的控件上就触发一个信号,我想了想,觉得这是可行的,根据在windows上的经验,要想让这样的控件也来捕获鼠标之类的消息,可以是这样做的:自己从系统默认的控件类里派生出自己的控件类来。其实这个这个类最主要的作用就是能让自己来写一些处理鼠标之类的函数,比方说在MFC里让自己的这个控件类来增加对WM_MOUSEMOVE消息的处理函数。这样鼠标一移动到控件上,我们自己的程序就能处理鼠标的移动消息了。那么qt中能不能也这样呢,翻了翻文档,在Qwidget里发现有一个enterEvent()的函数,文档介绍说一旦鼠标移动到Qwidget的时候,enterEvent()这个函数将被调用。所以我们也可以从控件类里派生出来一个自己的控件类,然后自己实现enterEvent()函数,在这个函数里发射一个信号。这就OK了。大致代码:1. class MyEdit:public QlineEdit2. {3. Q_OBJECT4. 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);16. }我现在把textChanged (s)信号连接到一个显示部件里,用QLCDNumber部件。1. class MyWindow:public QVBox2. {3. public:4. MyWindow();5. private:6. MyEdit * lineedit;7. QLCDNumber * lcdnum;8. };9. MyWindow::MyWindow()10. {11. QHBox* hbox1 = new QHBox(this);12. lineedit = new MyEdit(hbox1,0);13. QHBox* hbox2 = new QHBox(this);14. lcdnum = new QLCDNumber(hbox2);15. connect(lineedit,SIGNAL(textChanged ( const QString & )),lcdnum,SLOT(display ( const QString &)));16. }主函数: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();9. }OK其实我觉得这是个经验问题,像GUI程序,我觉得只是一些实现的类库不一样,比方说用qt的用qt,用MFC的用MFC,其实很多思路都会是差不多的。而只要你比较熟悉一种GUI库了,其他的学起来都比较的轻松了。因为等到你一种库搞得比较的熟悉了,GUI该有的些什么功能阿,控件阿,都比较熟悉了,我觉得就只剩下用什么用的库来实现的问题了。这个时候只要有一份某种GUI库的文档。很多问题就号解决了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式