Qt中获取常用的事件以及简单2D绘图

简介: 因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了。因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windows的API以及编程模式,现在要移植到Qt中,第一个要面临的问题就是如何将windows的消息机制很好的转换为Qt中的处理机制。

因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了。因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windows的API以及编程模式,现在要移植到Qt中,第一个要面临的问题就是如何将windows的消息机制很好的转换为Qt中的处理机制。windows中是消息,Qt中是事件和信号、槽,其实原理都是一样的。

1、常用事件

因为所有和界面相关的类都是继承自QWidget类,所以QWidget类有的时间和方法,在每个界面相关的类中都有,最常用的一些事件如下:

//   bool event(QEvent *);
//   virtual void mousePressEvent(QMouseEvent *);
//   virtual void mouseReleaseEvent(QMouseEvent *);
//   virtual void mouseDoubleClickEvent(QMouseEvent *);
//   virtual void mouseMoveEvent(QMouseEvent *);
//   virtual void wheelEvent(QWheelEvent *);
//   virtual void keyPressEvent(QKeyEvent *);
//   virtual void keyReleaseEvent(QKeyEvent *);
//   virtual void focusInEvent(QFocusEvent *);
//   virtual void focusOutEvent(QFocusEvent *);
//   virtual void enterEvent(QEvent *);
//   virtual void leaveEvent(QEvent *);
//   virtual void paintEvent(QPaintEvent *);
//   virtual void moveEvent(QMoveEvent *);
//   virtual void resizeEvent(QResizeEvent *);
//   virtual void closeEvent(QCloseEvent *);
//   virtual void contextMenuEvent(QContextMenuEvent *);
//   virtual void tabletEvent(QTabletEvent *);
//   virtual void actionEvent(QActionEvent *);
//   virtual void dragEnterEvent(QDragEnterEvent *);
//   virtual void dragMoveEvent(QDragMoveEvent *);
//   virtual void dragLeaveEvent(QDragLeaveEvent *);
//   virtual void dropEvent(QDropEvent *);
//   virtual void showEvent(QShowEvent *);
//   virtual void hideEvent(QHideEvent *);
//#if defined(Q_WS_MAC)
//   virtual bool macEvent(EventHandlerCallRef, EventRef);
//#endif
//#if defined(Q_WS_WIN)
//   virtual bool winEvent(MSG *message, long *result);
//#endif
//#if defined(Q_WS_X11)
//   virtual bool x11Event(XEvent *);
//#endif
//#if defined(Q_WS_QWS)
//   virtual bool qwsEvent(QWSEvent *);
//#endif

//    // Misc. protected functions
//   virtual void changeEvent(QEvent *);

//   virtual void inputMethodEvent(QInputMethodEvent *);

   virtual void mouseMoveEvent(QMouseEvent *);
   virtual void mousePressEvent(QMouseEvent *);
   virtual void keyPressEvent(QKeyEvent *);
   virtual void paintEvent(QPaintEvent *);
   virtual void inputMethodEvent(QInputMethodEvent *);


如果我们想要使用这些事件,只需要在自己的类中继承并重写这些事件处理函数就行了。

另外有一点在使用

   virtual void inputMethodEvent(QInputMethodEvent *);
这个事件的时候我们需要注意一下,因为在QWidget类中默认是忽略这个事件的,所以如果想要在使用输入法的时候截获这个事件就需要在自己的类构造函数中对自己的窗体类进行属性设置,具体代码如下:

    this->setAttribute(Qt::WA_InputMethodEnabled);
    this->setAttribute(Qt::WA_KeyCompression);
    this->setFocusPolicy(Qt::WheelFocus);

这个事件还是比较有用的,因为在使用输入法特别是中文的时候,要获取输入的内容就必须使用这个事件。

普通的拉丁字母获取键值就很简单了,重写

   virtual void keyPressEvent(QKeyEvent *);
相关的事件就行了。


2、简单2D绘图

这里要使用到QPainter类以及它的一些方法,并重写

   virtual void paintEvent(QPaintEvent *);
事件就行了,简单的使用代码如下:

    QPainter painter(this);
    QPen pen; //画笔
    QBrush brush;//画刷
    painter.drawLine(0,0,100,200);

    pen.setColor(QColor(255,0,0));
    brush.setColor(QColor(0,255,0,255));
    brush.setStyle(Qt::SolidPattern);

    painter.setPen(pen); //添加画笔
    painter.setBrush(brush); //添加画刷
    painter.drawRect(50,70,160,200); //绘制矩形

好了,今天是回归C/C++和Qt之后写的第一篇博客,内容比较简单,但是很基础,写的不好,希望大家见谅。

今天就到此为止了!!


目录
相关文章
|
5天前
|
开发者
Qt异步实现事件的定时执行 - QTimer和QThread的联合使用
通过将QTimer和QThread结合使用,Qt开发者可以实现高效的异步定时任务执行。这种方法不仅可以提升应用程序的响应能力,还可以在复杂的多线程环境中保持代码的简洁和可维护性。希望本文的详细介绍和示例代码能够帮助您更好地理解和应用这一技术。
23 14
|
5月前
|
容器
【qt】GraphicsView绘图架构
【qt】GraphicsView绘图架构
84 0
|
5月前
【qt】绘图
【qt】绘图
40 0
|
3月前
(14)Qt绘图(one)
本文介绍了在Qt中使用QPainter进行绘图的基础操作,包括如何指定绘图设备、使用QPen和QBrush设置线条和填充样式、绘制不同样式的线条和形状,以及如何实现纹理填充和渐变填充等效果。
68 6
(14)Qt绘图(one)
|
3月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
124 3
(13) Qt事件系统(two)
|
3月前
|
计算机视觉
(15)Qt绘图(two)
Qt框架中QPainter类的多种绘图功能,包括坐标变换、基本图形绘制、文本和图片绘制、图像保存以及碰撞检测等。
51 1
(15)Qt绘图(two)
|
3月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
107 0
|
5月前
|
API
Qt绘图之Paint系统
Qt绘图之Paint系统
71 2
|
5月前
Qt绘图之QWidget
Qt绘图之QWidget
99 1
|
5月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
249 4