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

网站制作项目php网站源码怎么在本地电脑调式

网站制作项目,php网站源码怎么在本地电脑调式,WordPress 导入中文字体,网站模板的制作怎么做的文章目录 事件event()事件过滤器案例#xff1a;检测鼠标事件案例#xff1a;定时器 事件 事件#xff08;event#xff09;是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘#xff0c;或者是窗口需要重新绘制的时候#xff0c;都会发出一个相应的事… 文章目录 事件event()事件过滤器案例检测鼠标事件案例定时器 事件 事件event是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘或者是窗口需要重新绘制的时候都会发出一个相应的事件 一些事件在对用户操作做出响应时发出如键盘事件等另一些事件则是由系统自动发出如计时器事件 回顾 Qt 程序需要在main()函数创建一个QApplication对象然后调用它的exec()函数这个函数就是开始 Qt 的事件循环在执行exec()函数之后程序将进入事件循环来监听应用程序的事件。 当事件发生时Qt 将创建一个事件对象。Qt 中所有事件类都继承于QEvent在事件对象创建完毕后Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件而是按照事件对象的类型分派给特定的事件处理函数 event() event()函数主要用于事件的分发所以如果希望在事件分发之前做一些操作就可以重写这个event()函数 如果传入的事件已被识别并且处理则需要返回 true否则返回 false如果返回值是 true那么 Qt 会认为这个事件已经处理完毕不会再将这个事件发送给其它对象而是会继续处理事件队列中的下一事件并且在event()函数中调用事件对象的accept()和ignore()函数是没有作用的不会影响到事件的传播 event()函数中实际是通过事件处理器来响应一个具体的事件。这相当于event()函数将具体事件的处理“委托”给具体的事件处理器。而这些事件处理器是 protected virtual 的因此我们重写了某一个事件处理器即可让 Qt 调用我们自己实现的版本。 由此可见event()是一个集中处理不同类型的事件的地方 事件过滤器 在程序将事件分发到事件分发器前可以利用过滤器做拦截 QObject有一个eventFilter()函数用于建立事件过滤器 virtual bool QObject::eventFilter ( QObject * watched, QEvent * event )事件过滤器会检查接收到的事件。如果这个事件是我们感兴趣的类型就进行我们自己的处理如果不是就继续转发。这个函数返回一个 bool 类型如果不想让它继续转发就返回 true否则返回 false 安装过滤器需要调用QObject::installEventFilter()函数 void QObject::installEventFilter ( QObject * filterObj )注意事项 1.事件过滤器和被安装过滤器的组件必须在同一线程否则过滤器将不起作用。另外如果在安装过滤器之后这两个组件到了不同的线程那么只有等到二者重新回到同一线程的时候过滤器才会有效 2.事件过滤器在目标对象接收到事件之前进行处理如果我们将事件过滤掉目标对象根本不会见到这个事件 案例检测鼠标事件 前置工作 1.项目 Add New C class 2.在mianWindow.ui文件当中创建一个Label控件 提升为 3.可以更改控件的格式 看的更明显 注意在第二步当中可以发现基类名称为 Q L a b e l QLabel QLabel所以生成的myLabel.h和myLabel.cpp文件要改动 //.h文件 #include QLabel class myLabel : public QLabel//改为继承QLabel//.cpp文件 myLabel::myLabel(QWidget *parent) : QLabel(parent) //父类对象从QWidget(parent) 》 QLabel(parent) myLabel.h //鼠标进入事件 void enterEvent(QEvent *event); //从父类继承的函数//鼠标离开事件 void leaveEvent(QEvent *);//鼠标按下 virtual void mousePressEvent(QMouseEvent *ev);//鼠标释放 virtual void mouseReleaseEvent(QMouseEvent *ev);//鼠标移动 virtual void mouseMoveEvent(QMouseEvent *ev);//通过event事件分发器 拦截 鼠标按下事件 bool event(QEvent *e);myLabel.cpp //鼠标进入事件 void myLabel::enterEvent(QEvent *event) {qDebug() 鼠标进入了; }//鼠标离开事件 void myLabel::leaveEvent(QEvent *) {qDebug() 鼠标离开了; }//鼠标按下 void myLabel::mousePressEvent(QMouseEvent *ev) {//当鼠标左键按下 提示信息if( ev-button() Qt::LeftButton){//arg:参数 global的含义基于窗口的距离 普通的x,y基于控件的距离QString str QString( 鼠标按下了 x %1 y %2 globalX %3 globalY %4 ).arg(ev-x()).arg(ev-y()).arg(ev-globalX()).arg(ev-globalY());qDebug() str;} }//鼠标释放 void myLabel::mouseReleaseEvent(QMouseEvent *ev) {if( ev-button() Qt::LeftButton){QString str QString( 鼠标释放了 x %1 y %2 globalX %3 globalY \ %4 ).arg(ev-x()).arg(ev-y()).arg(ev-globalX()).arg(ev-globalY());qDebug() str;} }//鼠标移动 void myLabel::mouseMoveEvent(QMouseEvent *ev) {// 当鼠标左键按下 提示信息 buttons返回按键类型 ev-buttons() Qt::LeftButton如果是左键才为真if( ev-buttons() Qt::LeftButton ) //移动是持续的过程{QString str QString( 鼠标移动了 x %1 y %2 globalX %3 globalY \ %4 ).arg(ev-x()).arg(ev-y()).arg(ev-globalX()).arg(ev-globalY());qDebug() str;} }bool myLabel::event(QEvent *e) {//如果是鼠标按下 在event事件分发中做拦截操作if(e-type() QEvent::MouseButtonPress){QMouseEvent * ev static_castQMouseEvent *(e); //QEvent是QMouseEvent的父类QString str QString( Event函数中鼠标按下了 x %1 y %2 globalX %3 globalY %4 ).arg(ev-x()).arg(ev-y()).arg(ev-globalX()).arg(ev-globalY());qDebug() str;return true; //true代表用户自己处理这个事件不向下分发 不会触发mousePressEvent函数}//其他事件 交给父类处理 默认处理return QLabel::event(e); }注意 1.QString的arg()函数可以自动替换掉QString中出现的占位符。其占位符以 % 开始后面是占位符的位置例如 %1%2 这种 QString([%1, %2]).arg(x).arg(y); x替换 %1y替换 %2 QString为[x, y]2.要点击鼠标之后才能在 m o u s e M o v e E v e n t mouseMoveEvent mouseMoveEvent函数中显示鼠标坐标值原因如下 QWidget中有一个mouseTracking属性该属性用于设置是否追踪鼠标只有鼠标被追踪时mouseMoveEvent()才会发出。如果mouseTracking是 false默认即是组件在至少一次鼠标点击之后才能够被追踪也就是能够发出mouseMoveEvent()事件如果mouseTracking为 true则mouseMoveEvent()直接可以被发出。 如果想不点击鼠标也能在 m o u s e M o v e E v e n t mouseMoveEvent mouseMoveEvent函数中显示鼠标坐标值在构造函数当中 myLabel::myLabel(QWidget *parent) : QLabel(parent) {//设置鼠标追踪状态 默认为falsesetMouseTracking(true); }3.$ev-button() $可以判断所有按键 Q t : : L e f t B u t t o n Qt::LeftButton Qt::LeftButton Q t : : R i g h t B u t t o n Qt::RightButton Qt::RightButton e v − b u t t o n s ( ) ev-buttons() ev−buttons()判断组合按键 判断move时候的左右键 结合 操作符 案例定时器 创建方式1 利用事件 void timerEvent ( QTimerEvent * ev)启动定时器 s t a r t T i m e r ( 1000 ) startTimer(1000) startTimer(1000) 单位是毫秒$timerEvent 的返回值是定时器的唯一标示可以和 的返回值是定时器的唯一标示 可以和 的返回值是定时器的唯一标示可以和ev-timerId $做比较 创建方式2 1.利用定时器类 QTimer 创建定时器对象 QTimer * timer new QTimer(this) 2.启动定时器 timer-start(毫秒) 3.每隔一定毫秒发送信号 timeout 进行监听 4.暂停 timer-stop 前置内容 1.先预先创建4个 L a b e l Label Label 创建定时器方法1需要重写定时器的事件 //widget.h //重写定时器的事件 void timerEvent(QTimerEvent *);int id1; //定时器1的唯一标示 int id2; //定时器2的唯一标示MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);//启动定时器 会返回定时器的标识符id1 startTimer(1000); //参数:时间间隔单位是毫秒id2 startTimer(2000); }void MainWindow::timerEvent(QTimerEvent* ev) {if(ev-timerId() id1)//label1 每隔1秒1{static int num 1;ui-label_1-setText( QString::number(num));}if(ev-timerId() id2) //label2 每隔2秒 1{static int num2 1;ui-label_2-setText( QString::number(num2));} }第二种方式创建定时器 在ui界面当中多增加两个按钮用于停止和恢复定时器 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);//定时器第二种方式QTimer * timer new QTimer(this);//启动定时器timer-start(500);connect(timer,QTimer::timeout,[](){ //label3 每隔0.5秒1static int num 1;ui-label_3-setText(QString::number(num));});//点击暂停按钮 实现停止定时器connect(ui-stop_btn,QPushButton::clicked,[](){timer-stop();qDebug() 定时器已暂停 ;});//点击恢复按钮 重写启动定时器connect(ui-start_btn,QPushButton::clicked,[](){timer-start(500);qDebug() 定时器已恢复 ;}); }定时器的事件过滤器 重写 bool eventFilter(QObject *, QEvent *); MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {//步骤1:给控件label_4 安装事件过滤器ui-label_4-installEventFilter(this); }// 步骤2 重写 eventfilter事件 bool MainWindow::eventFilter(QObject * obj , QEvent * e) {if(obj ui-label_4)//控件判断 因为可能很多控件都安装了事件过滤器{if(e-type() QEvent::MouseButtonPress)//如果是label的鼠标按下{QMouseEvent * ev (QMouseEvent*)e;QString str QString( 事件过滤器中鼠标按下了 x %1 y %2 globalX %3 globalY %4 ).arg(ev-x()).arg(ev-y()).arg(ev-globalX()).arg(ev-globalY());qDebug() str;qDebug() 事件过滤器拦截成功;return true; //true代表用户自己处理这个事件不向下分发}}//其他默认处理return QWidget::eventFilter(obj,e); }
http://www.zqtcl.cn/news/548937/

相关文章:

  • 城市轨道建设规范下载网站古网站典模板
  • 关于实验室建设的英文网站深圳企业网站制作公司怎样
  • wordpress全站背景音乐中山网站搜索排名
  • 搭建网站的过程透明主题wordpress
  • 丰台网站建设公司电话深圳微信商城网站设计公司
  • 做淘宝要用的网站吗上海微信网站
  • 佛山高端网站制作公司wordpress 发送邮件插件
  • 类似站酷的设计类网站网站建设需要待摊吗
  • 用php做视频网站在学做网站还不知道买什么好
  • wordpress培训类网站网站建设 好
  • 网站开发需要2个月吗网站建设案例精粹
  • 网站建设项目职责营销型网站建设五大内容
  • 建设工程监理招标网站W做网站
  • 网站建设与维护教学课件网站上线前做环境部署
  • 信誉好的网站建设做网站成为首富的外国人
  • 常州网站制作市场湖北省荆门市城乡建设网站
  • 泉州网站制作运营商专业北京软件公司招聘信息查询
  • 车床加工东莞网站建设网站建设教学改进
  • 深圳专业做网站建设西安网站建设有限公司
  • wordpress 一键建站wordpress子主题style
  • 昆明设计网站怎么做网络广告
  • 2018什么做网站深圳企业网站设
  • 北京旅游外贸网站建设博客集成wordpress
  • 中国最好的建设网站哪些网站教你做系统
  • 自己做网站别人怎么看见网站建设办公
  • 凡科做网站视频网站哪家好
  • 查询网站是否正规营销策略国内外文献综述
  • 做网页用的网站wordpress用户角色权限管理
  • 怎么查网站备案的公司wordpress 无刷新评论
  • 学前心理学课程建设网站百度极速版下载