当前位置: 首页 > news >正文

温州免费建站模板南京网站设计网站

温州免费建站模板,南京网站设计网站,生成短链接的网站,深圳网页设计培训教程事件的概念 在Qt中#xff0c;以事件驱动UI工具集#xff0c;包括信号和槽都依赖于Qt的事件处理机制。通常事件是由窗口系统或Qt自身产生的#xff0c;用以响应所发生的各类事情。如#xff1a;用户按下并释放键盘或鼠标、窗口缩放后重绘、定时器到时等。如下图#xff1…事件的概念 在Qt中以事件驱动UI工具集包括信号和槽都依赖于Qt的事件处理机制。通常事件是由窗口系统或Qt自身产生的用以响应所发生的各类事情。如用户按下并释放键盘或鼠标、窗口缩放后重绘、定时器到时等。如下图事件比信号更原始。一个下压式按钮首先感受到鼠标事件在进行必要的处理以产生按钮下沉后弹起的视觉效果之后才会发射clicked()信号。 如何处理事件 在Qt中事件被封装为对象所有的事件对象类型都继承自抽象类QEvent事件发生时首先被调用的是QObject类中的虚函数event()其参数(QEvent)标识了具体的事件类型在Qt桌面应用(Qt Widgets Application)开发中QWidget类覆盖了其基类中的event()虚函数根据具体事件调用具体事件处理函数 void QWidget::mousePressEvent(QMouseEvent* e); // 鼠标按下事件void QWidget::mouseReleaseEvent(QMouseEvent* e); // 鼠标抬起事件void QWidget::mouseMoveEvent(QMouseEvent* e); // 鼠标移动事件void QWidget::paintEvent(QPaintEvent* e); // 绘图事件 绘图事件 通过绘图事件可实现自定义的图像绘制。下列情况之一发生时将触发窗口的绘制事件即QWidget类的paintEvent()虚函数会被调用 窗口被创建后第一次显示出来窗口由隐藏状态转变为可见状态窗口由最小化状态转变为正常或最大化状态窗口因尺寸大小的变化需要呈现更多的内容QWidget类的update()/repaint()成员函数被调用 若希望在自己的窗口中显示某个图像在QWidget的窗口子类中可重写绘图事件函数paintEvent在其中可用QPainter(Qt二维图形引擎)实现指定的图像绘制、渲染等操作。 void XXX::paintEvent(QPaintEvent* e) {// 创建画家对象QPainter painter(this)// 获取绘图所在矩形区域QRect rect ui-frame-frameRect()// 坐标系平移让rect和painter使用相同的坐标系rect.translate(ui-frame-pos());// 构建要绘制的图形对象QImage image(:/images/ QString::number(m_index) .jpg);// 使用painter将image图片画到rectpainter.drawImage(rect, image); }定时器事件 实现机制 定时器事件由QObject提供定时器信号由QTimer提供 通过定时器事件实现定时器 int QObject::startTimer(int interval); 启动定时器以后每隔interval毫秒触发一次定时器事件返回定时器ID。void QObject::timerEvent(QTimerEvent* e); 虚函数定时器事件处理函数void QObject::killTimer(int id); 关闭参数id所标识的定时器 定时器摇奖部分代码 //初始化部分操作 void XXX::init(void) {m_index 0;isStarted false;// 设置随机种子qsrand(QTime::currentTime().msec());// 加载“./photos”中所有图片到图片容器loadImages(./photos); }// 开始按钮对应槽函数 void XXX::on_pushButton_clicked() {if(isStarted false){isStarted true; // 摇奖开始m_timer startTimer(50);ui-pushButton-setText(停止);}else{isStarted false; // 摇奖结束killTimer(m_timer);ui-pushButton-setText(开始);} }// 加载图片到容器功能 void XXX::loadImages(const QString path) {QDir dir(path);// 遍历当前目录所有图片QStringList listFiles dir.entryList(QDir::Files);for(int i 0; i listFiles.size(); i){QImage image(path / listFiles.at(i));m_vecImages image;}// 递归遍历子目录中的图片QStringList listDirs dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);for(int i 0; i listDirs.size(); i){loadImages(path / listDirs.at(i));} }// 定时器事件处理函数 void XXX::timerEvent(QTimerEvent* e) {m_index qrand() % m_vecImages.size();update(); //将触发绘图事件处理函数 }// 绘图事件处理函数 void XXX::paintEvent(QPaintEvent* e) {QPainter painter(this);QRect rect ui-frame-frameRect();rect.translate(ui-frame-pos());painter.drawImage(rect, m_vecImages[m_index]); }通过QTimer实现定时器 QTimer m_timer void start(int msec); 开启定时器void stop(); 停止定时器 每当定时器到时后会发射信号timeout connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimeout())); 鼠标和键盘事件 鼠标事件 QWidget类定义了以下虚函数提供对鼠标事件的处理 virtual void mousePressEvent(QMouseEvent* e); //鼠标按下virtual void mouseReleaseEvent(QMouseEvent* e); //鼠标抬起virtual void mouseMoveEvent(QMouseEvent* e); //鼠标移动virtual void mouseDoubleClickEvent(QMouseEvent* e); //鼠标双击 // 鼠标左键拖动QLabel//鼠标按下 void XXX::mousePressEvent(QMouseEvent* e) {// 是否鼠标左键if(e-button() Qt::LeftButton){// 获取label所在矩形区域QRect rect ui-m_label-frameRect();// 坐标平移让rect和鼠标使用相同的坐标系rect.translate(ui-m_label-pos());// 判断当前鼠标点击位置是否在QLabel的矩形区域中if(rect.contains(e-pos())){m_drag true; // 可拖拽m_pos ui-m_label-pos() - e-pos(); // 鼠标相对QLabel的位置}} } // 鼠标抬起 void XXX::mouseReleaseEvent(QMouseEvent* e) {if(e-button() Qt::LeftButton){m_drag false;} } // 鼠标移动 void XXX::mouseMoveEvent(QMouseEvent* e) {if(m_drag){// 计算QLabel要移动的新位置QPoint newPos e-pos() m_pos;QSize s1 size(); // 获取父窗口的大小QSize s2 ui-m_label-size(); //获取QLabel的大小 // 设置QLabel移动的范围限制// x: 0 ~ s1.width() - s2.width()if(newPos.x() 0){newPos.setX(0);}else if(newPos.x() s1.width() - s2.width()){newPos.setX(s1.width() - s2.width());}// y: 0 ~ s1.height() - s2.height()if(newPos.y() 0){newPos.setY(0);}else if(newPos.y() s1.height() - s2.height()){newPos.setY(s1.height() - s2.height());}// 移动QLabel到新位置ui-m_label-move(newPos);} }键盘事件 QWidget类定义了以下虚函数提供对键盘事件的处理 virtual void keyPressEvent(QKeyEvent* e); // 按键按下 virtual void keyReleaseEvent(QKeyEvent* e); // 按键抬起 // 键盘方向键控制QLabel移动 void XXX::keyPressEvent(QKeyEvent* e) {//QLabel所在位置的x坐标int x ui-m_label-pos().x();//QLabel所在位置的y坐标int y ui-m_label-pos().y();// 向上移动每次移动10像素if(e-key() Qt::Key_Up){ui-m_label-move(x, y - 10);}else if(e-key() Qt::Key_Down){ui-m_label-move(x, y 10);} else if(e-key() Qt::Key_Left){ui-m_label-move(x - 10, y);}else if(e-key() Qt::Key_Right){ui-m_label-move(x 10, y);} }参考达内教育QT图形框架
http://www.pierceye.com/news/732/

相关文章:

  • 徐州市建设局网站电话号码retina wordpress
  • 网站编辑岗位张家界旅游
  • 免费物业网站模板不是营销型的网站
  • 专做毕业设计的网站梅林网站建设公司
  • 绍兴企业网站推广做安利能开个人网站
  • 自适应手机网站模板生产模板的厂家
  • 如何创建一个网站链接企业型网站制作
  • 淘宝上做进出口网站有哪些保定网站制作报价
  • 技术型网站做哪一种好网站建设方法有那几种
  • 做游戏自媒体视频网站黑客入侵别人网站做seo
  • 无锡做网站无锡网站设计做阿里巴巴网站电话
  • 网站 前置审批南昌网站seo多少钱
  • 怎么制作网站教程图片微商水印相机做网站
  • 南阳做玉器网站wordpress视频广告插件
  • 网站建设与管理复习知识点长春做网站网站
  • 找别人建网站去哪里销售渠道策略
  • 不需要写代码的网站开发软件创建个人主页网站
  • 网站定向推送怎么做小白怎么做网站赚钱
  • 织梦网站安装教程视频微信营销手机
  • 营口网站制作公司wordpress没有外观
  • 网站编辑兼职深圳市研发网站建设哪家好
  • 找到网站永久域名怎么做一个网上商城
  • 网站建设制作需求ps网站轮播图怎么做的
  • 网页设计网站开发需要哪些知识wordpress拖曳组件
  • 北京建网站报价网站建设军成
  • 免费网站建设域名无锡网络营销平台
  • 上海外贸网站推广wordpress欣赏
  • 企业门户网站模板显示电脑没有安装wordpress
  • 创意设计海报凤山网站seo
  • 网站设计在线域名交易中心