QT03

//消息基础
#include "MyWidget.h"
#include <QApplication>
#include <QEvent>
#include <QMouseEvent>              //分清鼠标左右键
#include <QDebug>
#include <QKeyEvent>
#include <QVBoxLayout>
#include <QPainter>       //画图工具

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    QVBoxLayout* lay = new QVBoxLayout(this);
#if 0
    QPushButton* button2;
    lay->addWidget(button = new QPushButton("OK" ,this));
    lay->addWidget(button2 = new QPushButton("BUTTON2"));


    //鼠标不需要按下就能得到调用
    this->setMouseTracking(true);

    QObject::connect(button2,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
    QObject::connect(button,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));

#endif
    lay->addWidget(edit = new QLineEdit());

    connect(edit ,SIGNAL(returnPressed()),this, SLOT(slotButtonClicked()));
}

void MyWidget::slotButtonClicked()
{
    //sender()
    //QPushButton* button = (QPushButton*) sender();
    QLineEdit* edit = (QLineEdit*) sender();     //这里就能实现处理lineedit里面的消息了

    //qDebug() << "slotButtonClicked" ;
    qDebug() << edit->text();
}

void MyWidget::closeEvent(QCloseEvent *ev)    //这个可以在关闭窗口前做一些事情
{
    qDebug() << "close";
}
void MyWidget::showEvent(QShowEvent *event)
{

}
void MyWidget::hideEvent(QHideEvent *event)
{

}
void MyWidget::paintEvent(QPaintEvent *event)   //重绘消息
{
    QPainter p(this);
    p.drawLine(QPoint(0,0),QPoint(100,100));
}
void MyWidget::resizeEvent(QResizeEvent *event)   //最大最小
{

}


//消息处理的大致过程
//Qapplication先得到->具体应该处理的窗口::event()->event()根据消息类型来调用其具体的虚函数

//我们的处理流程
/*
1)可以重载具体的虚函数,来实现对消息的响应
2)可以重载event函数,用来处理或者截取消息

*/

//一般不用这个重载,用更精确的  (这个可以截断消息)
#if 0
bool MyWidget::event(QEvent *ev)
{
//    if(ev->type() == QEvent::MouseButtonPress)   //现在没有确定鼠标哪个键
//    {
//        QMouseEvent* ev1 = (QMouseEvent* )ev;           //强制转化为这个
//        qDebug() << "mouse press";
//    }

//    if(ev->type() == QEvent::MouseButtonPress)            //消息的截断
//        return true;
     return MyWidget::event(ev);                             //继续事件处理
}
#endif

void MyWidget::mousePressEvent(QMouseEvent *ev1)            //常用的鼠标消息重载
{
    QPoint pt = ev1->pos();                 // 打印点击坐标
    qDebug() << pt;
    if(ev1->button() == Qt::LeftButton)
    {
        qDebug() << "left press";
    }
    if(ev1->modifiers() == Qt::ShiftModifier)
    {
        qDebug() << "shift press";
    }
    //可以这样
//    if(ev1->modifiers() == Qt::ShiftModifier)
//    {
//        //handle 1
//        return ;
//    }
//    //handle2 without shitf


}
void MyWidget::mouseReleaseEvent(QMouseEvent *)
{

}
void MyWidget::mouseMoveEvent(QMouseEvent *)
{
    static int i=0;
    qDebug() << "mouse move" << i++;          //直接这样的话,需要按下左键才有效果
}
void MyWidget::mouseDoubleEvent(QMouseEvent *)
{

}


void MyWidget::keyPressEvent(QKeyEvent *ev)
{
    ev->modifiers();
    int key = ev->key();
    qDebug() << key;
    char a =key;
    qDebug() << (char)a;
}

void MyWidget::KeyReleaseEvent(QKeyEvent *)
{

}

int main(int argc,char* argv[])
{
    QApplication app(argc,argv);

    MyWidget w;
    w.show();

    return app.exec();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值