在编写串口程序的时候,想法实现发送框双击发送数据,可以发现QPlainTextEdit这类既然没有DoubleClick这个信号,后来找了下相关资料,只知道QPlainTextEdit的基类是QWidget,且该类是带有MouseDoubleClickEvent这个事件的,可问题是我想直接就能在我的主程序累里使用该事件,结果试了好多的方式,看了不少的资料都没找到什么可行的方案。
那没办法,老老实实的在QPlainTextEdit类上派生一个类,并且重载了virtual void mouseDoubleClickEvent ( QMouseEvent * event )函数,在自定义了一个mouseDoubleClick信号,每当个该事件触发的时候,我就发出一个双击信号,这样功能也就实现了。
1 qsendtextedit.h 2 3 #ifndef QSENDTEXTEDIT_H 4 #define QSENDTEXTEDIT_H 5 6 #include <QPlainTextEdit> 7 8 class QSendTextEdit : public QPlainTextEdit 9 { 10 Q_OBJECT 11 public: 12 explicit QSendTextEdit(QWidget *parent = 0); 13 14 signals: 15 void mouseDoubleClick(void); 16 public slots: 17 18 protected: 19 virtual void mouseDoubleClickEvent(QMouseEvent *e); 20 21 }; 22 23 #endif // QSENDTEXTEDIT_H
1 qsendtextedit.c 2 3 #include "qsendtextedit.h" 4 5 QSendTextEdit::QSendTextEdit(QWidget *parent) : 6 QPlainTextEdit(parent) 7 { 8 } 9 10 void QSendTextEdit::mouseDoubleClickEvent(QMouseEvent *e) 11 { 12 if(e->type() == QEvent::MouseButtonDblClick) 13 { 14 appendPlainText("double click"); 15 emit mouseDoubleClick(); 16 } 17 18 }