12.1、QT::QEventTest操作

前言:

本文操作均为在vs2015+QT5.9.5版本中执行

头文件:qeventtest.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_qeventtest.h"

class QEventTest : public QWidget
{
	Q_OBJECT

public:
	QEventTest(QWidget *parent = Q_NULLPTR);
	//重载事件函数
	bool event(QEvent *ev);
	//重载键盘按下事件
	void keyPressEvent(QKeyEvent *ev);
	//重载键盘松开事件
	void keyReleaseEvent(QKeyEvent *ev);
private:
	Ui::QEventTestClass ui;
};

UI文件:qeventtest.ui

/********************************************************************************
** Form generated from reading UI file 'qeventtest.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QEVENTTEST_H
#define UI_QEVENTTEST_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_QEventTestClass
{
public:
    QLabel *label;

    void setupUi(QWidget *QEventTestClass)
    {
        if (QEventTestClass->objectName().isEmpty())
            QEventTestClass->setObjectName(QStringLiteral("QEventTestClass"));
        QEventTestClass->resize(961, 608);
        label = new QLabel(QEventTestClass);
        label->setObjectName(QStringLiteral("label"));
        label->setGeometry(QRect(210, 170, 531, 301));
        label->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 255);\n"
"font: 28pt \"\351\273\221\344\275\223\";"));
        label->setAlignment(Qt::AlignCenter);

        retranslateUi(QEventTestClass);

        QMetaObject::connectSlotsByName(QEventTestClass);
    } // setupUi

    void retranslateUi(QWidget *QEventTestClass)
    {
        QEventTestClass->setWindowTitle(QApplication::translate("QEventTestClass", "QEventTest", Q_NULLPTR));
        label->setText(QApplication::translate("QEventTestClass", "\346\226\207\346\234\254\346\265\213\350\257\225", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class QEventTestClass: public Ui_QEventTestClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QEVENTTEST_H

主函数:main.cpp

#include "qeventtest.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QEventTest w;
	w.show();
	return a.exec();
}

实现文件:qeventtest.cpp

#include "qeventtest.h"
#include <QDebug>
#include <QEvent>
#include <QKeyEvent>
QEventTest::QEventTest(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	//this->setMouseTracking(true);
}
//QEvent类是所有事件类的基类。事件对象包含事件参数
bool QEventTest::event(QEvent *ev)
{
#if 0
	qDebug() << ev->type();//打印类型
	子节点不会响应事件
	return false;
	所有事件对象都会响应
	return QWidget::event(ev);
#endif  //重载QEvent响应事件测试

#if 0
	//键盘事件
	//判断键盘是否按下,键盘按下任意按钮打印
	if (ev->type() == QEvent::KeyPress)
	{
		//强转为子类QKeyEvent获取按钮信息
		QKeyEvent *ke = static_cast<QKeyEvent*>(ev);
		//打印按下按钮的名字,打印的是ASCII值需要转换为char变成“英文”
		qDebug() << "KeyPress =" << (char)ke->key();
		return true;
	}
	return QWidget::event(ev);//激活QWidget里控件的所有事件

#endif	//键盘事件测试
	//判断键盘是否按下
	if (ev->type() == QEvent::KeyPress)
	{
		//强转为子类QKeyEvent获取按钮信息
		QKeyEvent *ke = static_cast<QKeyEvent*>(ev);
		//判断键盘是否按下‘A’(PS:不分大小写);
		//按键按下判断结束后,剩下的事件由下面的“按键松开事件”接着继续处理
		if(ke->key() == 'A')
		{
			//自动连续事件不处理
			//if (!ke->isAutoRepeat())
				qDebug() << "aaaaaaaaaaaaaaaaaaaaaaaaa";
			//return true;//返回为true(PS:代表处理完了,处理下一个事件)
			//测试效果和return true;基本一样没发现什么不同
			return false;//返回为false(PS:代表本事件事件处理完,下一个事件可以接着进行处理)

		}
	}
	return QWidget::event(ev);
}

void QEventTest::keyPressEvent(QKeyEvent *ev)
{
	//检查是否重复按下
	if (ev->isAutoRepeat()) return;
	if (ev->key() == Qt::Key_F1)
	{
		qDebug() << "Key_F1";
	}
	qDebug() << "keyPressEvent" << ev->key();
}
void QEventTest::keyReleaseEvent(QKeyEvent *ev)
{
	//检查是否重复松开
	if (ev->isAutoRepeat()) return;
	qDebug() << "keyReleaseEvent" << ev->key();
}

ui界面布局样式:

由于文件损坏,暂无

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳一航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值