zoukankan      html  css  js  c++  java
  • QT学习笔记6

    事件(event)

    一般来说,使用Qt编程时,我们并不会把主要精力放在事件上,因为在Qt中,需要我们关心的事件总会发出一个信号。比如,我们关心的是QPushButton的鼠标点击,但我们不需要关心这个鼠标点击事件,而是关心它的clicked()信号。这与其他的一些框架不同:在MFC中,你所要关心的是鼠标左键按下这个事件。总的来说,如果我们使用组件,我们关心的是信号槽;如果我们自定义组件,我们关心的是事件。因为我们可以通过事件来改变组件的默认操作。比如,如果我们要自定义一个QPushButton,那么我们就需要重写它的鼠标点击事件和键盘处理事件,并且在恰当的时候发出clicked()信号。

     1 #include "mainwindow.h"
     2 #include <QtGui/QApplication>
     3 
     4 #include <QMouseEvent> 
     5 
     6 class EventLabel:public QLabel
     7 {
     8 protected:
     9     void mouseMoveEvent(QMouseEvent *ev);
    10     void mousePressEvent(QMouseEvent *ev);
    11     void mouseReleaseEvent(QMouseEvent *ev);
    12     
    13 };
    14 
    15 void EventLabel::mouseMoveEvent(QMouseEvent *ev)
    16 {
    17     this->setText(QString("<center><h1>Move: (%1, %2)</h1></center>") 
    18         .arg(QString::number(ev->x()), QString::number(ev->y()))); 
    19 }
    20 
    21 void EventLabel::mousePressEvent(QMouseEvent *ev)
    22 {
    23    QString text;
    24    text.sprintf("<center><h1>Move: (%d, %d)</h1></center>",ev->x(),ev->y());
    25    this->setText(text);
    26 }
    27 
    28 void EventLabel::mouseReleaseEvent(QMouseEvent *ev)
    29 {
    30     this->setText(QString("<center><h1>Move: (%1, %2)</h1></center>").arg(QString::number(ev->x()),QString::number(ev->y())));
    31 
    32 }
    33 
    34 
    35 int main(int argc, char *argv[])
    36 {
    37     QApplication a(argc, argv);
    38     /*MainWindow w;
    39     w.show();*/
    40     EventLabel *eventLabel=new EventLabel;
    41     eventLabel->setWindowTitle("my title");
    42     eventLabel->resize(300,200);
    43     eventLabel->show();
    44     return a.exec();
    45 }

    运行结果:

    忽略事件:判断点击的按钮是左键还是右键,忽略事件调用父类的响应函数即可。

     1 void EventLabel::mousePressEvent(QMouseEvent *ev)
     2 {
     3     if(ev->button() == Qt::RightButton) 
     4     {
     5         QString text;
     6         text.sprintf("<center><h1>Move: (%d, %d)</h1></center>",ev->x(),ev->y());
     7         this->setText(text);
     8     } else 
     9     {
    10         QLabel::mousePressEvent(ev);
    11     }
    12 
    13   
    14 }

    退出窗口选择:

     1 void MainWindow::closeEvent(QCloseEvent * event)
     2 {
     3     if(continueToClose()) 
     4     {
     5         event->accept();
     6     } else {
     7         event->ignore();
     8     }
     9 }
    10 
    11 bool MainWindow::continueToClose()
    12 {
    13     if(QMessageBox::question(this,
    14         tr("Quit"),
    15         tr("Are you sure to quit this application?"),
    16         QMessageBox::Yes | QMessageBox::No,
    17         QMessageBox::No)
    18         == QMessageBox::Yes) {
    19             return true;
    20     } else {
    21         return false;
    22     }
    23 }
  • 相关阅读:
    No.1
    JS二叉树的操作
    JS实现快排
    BOM中的各种height
    innerHTML outerHTML innerText value 区别
    【转载】JS中DOM操作汇总
    【转载】轻松理解JS闭包
    【转载】JavaScript模块入门
    【转载】JavaScript模块简介
    【转载】浏览器缓存详解:expires cache-control last-modified
  • 原文地址:https://www.cnblogs.com/love6tao/p/5198860.html
Copyright © 2011-2022 走看看