//消息基础
#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();
}