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之后写的第一篇博客,内容比较简单,但是很基础,写的不好,希望大家见谅。

今天就到此为止了!!


目录
相关文章
|
2月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
460 0
|
2月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
75 0
QT基础入门——Qt事件(五)
|
2月前
|
数据可视化 图形学 C++
C++ Qt开发:Charts绘图组件概述
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QCharts`二维绘图组件的常用方法及灵活运用。Qt Charts 提供了一个强大且易于使用的工具集,用于在 Qt 应用程序中创建各种类型的图表和图形可视化,该模块提供了多种类型的图表,包括折线图、散点图、条形图、饼图等。这使得开发人员能够轻松地将数据以直观的方式呈现给用户,增强应用程序的可视化效果。
92 0
C++ Qt开发:Charts绘图组件概述
|
6天前
Qt绘图(线条、椭圆、矩形、图片滚动)
Qt绘图(线条、椭圆、矩形、图片滚动)
11 3
|
6天前
Qt事件分发器、事件过滤器
Qt事件分发器、事件过滤器
8 1
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
|
2月前
|
开发框架 算法 程序员
【Qt 元对象系统】深入探索Qt事件过滤:从基础到高级应用
【Qt 元对象系统】深入探索Qt事件过滤:从基础到高级应用
65 7
|
2月前
|
测试技术 数据库 C++
Qt C++拖放事件探索之旅:多方法深入解析
Qt C++拖放事件探索之旅:多方法深入解析
270 1
|
2月前
|
缓存 Linux 定位技术
Qt绘图指南:掌握高效、美观的GUI设计之道
Qt绘图指南:掌握高效、美观的GUI设计之道
564 1
|
2月前
|
C++
qt事件过滤器的使用(可以用于控制屏幕背光等)
qt事件过滤器的使用(可以用于控制屏幕背光等)
32 0