c++ qt--事件(第六部分)

c++ qt–事件(第六部分)

一.编辑伙伴,编辑顺序(按TAB进行切换)

1.编辑伙伴

此功能在设计界面如下的位置

c++ qt--事件(第六部分)_第1张图片

1.设置伙伴关系

c++ qt--事件(第六部分)_第2张图片

鼠标左键长按一个Label组件然后把鼠标移到另一个组件上

2.伙伴关系的作用

伙伴关系的作用就是可以设置快捷键,通过快捷键直接定位到某个组件

3.添加快捷键

c++ qt--事件(第六部分)_第3张图片

4.使用快捷键

ALT+设置快捷键的字符

qt中上面的菜单栏也可以用alt+相应的字符进行使用

c++ qt--事件(第六部分)_第4张图片

2.编辑顺序

此功能在设计界面如下的位置

c++ qt--事件(第六部分)_第5张图片

1.设置编辑顺序

直接用鼠标左键点排序的方块即可,先点的顺序就靠前

c++ qt--事件(第六部分)_第6张图片

c++ qt--事件(第六部分)_第7张图片

3.进行切换

按TAB键即可进行编辑对象的切换(按顺序切换)

二.事件

1.什么是事件

事件是由系统或Qt本身在不同的时刻发出的。

事件是信号的前驱(事件驱动信号)

如果使用组件,关心的是信号槽;如果使用自定义组件,关心的是事件

2.关于事件的第一个例子 监控鼠标状态(用事件来进行监控)

1.用到的组件如下

c++ qt--事件(第六部分)_第8张图片

2.重写事件(虚函数重写)

1.创建一个文件,用来重写事件(虚函数重写)

c++ qt--事件(第六部分)_第9张图片

c++ qt--事件(第六部分)_第10张图片

2.修改类

在创建的文件的头文件进行的修改

c++ qt--事件(第六部分)_第11张图片

在创建的文件的源文件进行的修改

c++ qt--事件(第六部分)_第12张图片

3.重写事件(虚函数重写)

在创建的文件的头文件的类中写下面代码

//声明
public:
     void mousePressEvent(QMouseEvent *ev) override;//override是判断是否重写了父类的虚函数,注意qt中的虚函数的函数名是斜体的
     void mouseMoveEvent(QMouseEvent *ev) override;
     void mouseReleaseEvent(QMouseEvent *ev) override;

在创建的文件的源文件中写下面代码

mylabel1::mylabel1(QWidget *parent) : QLabel(parent)//构造函数
{
    this->setMouseTracking(true);//鼠标默认不追踪,这里设置鼠标默认追踪

}

//button 触发当前时间的按钮
//button 当前时间发生时,哪些按键时按下的
//定义
void mylabel1::mousePressEvent(QMouseEvent *ev){
    if(ev->button()==Qt::LeftButton){//如果是鼠标左键按下
        QString s=QString("鼠标左键按下:%1,%2").arg(ev->x()/*获取横坐标*/).arg(ev->y()/*获取纵坐标*/);
        this->setText(s);
    }
}

void mylabel1::mouseMoveEvent(QMouseEvent *ev){
    QString s;
    if(ev->buttons()==(Qt::LeftButton|Qt::RightButton)){//鼠标左键和按键都按下了
        s=QString("鼠标左右键:%1,%2").arg(ev->x()).arg(ev->y());//获取坐标
    }
    else if(ev->buttons()==(Qt::NoButton)){//鼠标左键和右键都按下了
        s=QString("没有按键:%1,%2").arg(ev->x()).arg(ev->y());//获取坐标
    }
      this->setText(s);
}

void mylabel1::mouseReleaseEvent(QMouseEvent *ev){

    if(ev->button()==Qt::RightButton){//鼠标右键 释放
        QString s=QString("鼠标右键释放:%1,%2").arg(ev->x()).arg(ev->y());//获取坐标
        this->setText(s);
    }
}
4.将子类与组件进行绑定

c++ qt--事件(第六部分)_第13张图片

c++ qt--事件(第六部分)_第14张图片

3.关于事件的第二个例子 输入电话号码 只能输入数字且只能是11位(用事件来进行监控)

1.用到的组件如下

c++ qt--事件(第六部分)_第15张图片

2.重写事件(虚函数重写)

1.创建一个文件,用来重写事件(虚函数重写)

c++ qt--事件(第六部分)_第16张图片

c++ qt--事件(第六部分)_第17张图片

2.修改类

在创建的文件的头文件进行的修改

c++ qt--事件(第六部分)_第18张图片

在创建的文件的源文件进行的修改

c++ qt--事件(第六部分)_第19张图片

3.重写事件(虚函数重写)

在创建的文件的头文件的类中写下面代码

//声明
public:
     //事件 分发
     bool event(QEvent *) override;

     //事件处理器 event handler
     void keyPressEvent(QKeyEvent *) override;

在创建的文件的源文件中写下面代码

//定义
bool myLineEdit::event(QEvent * ev)
{
    if(ev->type()/*判断事件的类型*/==QEvent::KeyPress){ //如果当前事件类型为键盘按下事件
        QKeyEvent* pKey=(QKeyEvent*)ev;//强转为某个具体的事件

        int key=pKey->key();//获取按下的那个按键
        if((Qt::Key_0<=key&&key<=Qt::Key_9)||key==Qt::Key_Backspace){//如果是数字,则放行
            qDebug()<<"event 放行 "<
4.将子类与组件进行绑定

c++ qt--事件(第六部分)_第20张图片

c++ qt--事件(第六部分)_第21张图片

c++ qt--事件(第六部分)_第22张图片

你可能感兴趣的:(c++,c++,qt)