资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

【Qt学习笔记】4.事件处理

首先解释几个名词

创新互联企业建站,十年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于做网站、成都做网站中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。

事件:

Qt中的事件,主要指用户输入事件,比如:点击一个按钮、选中复选框、按下回车等。

事件处理:

当事件发生时,程序做出的反应,比如:当点击显示按钮时,程序弹出一个对话框,或产生其他相应。

信号和槽:

Qt中的事件处理机制叫做信号和槽 (signal & slot)

其理论模型为:

对象 a 中有一个信号signal:XXX(代表一个事件)

对象 b 中有一个槽slot:YYY(事件处理函数)

事先把它们连接起来, connect(a, XXX, b, YYY);

然后,当 a 中事件发生时,b中的处理函数就会被调用。

(每一种界面开发库都有一个事件处理机制,并且,事件处理总是脱离C++语法之外)

一、实现事件处理的过程:

1、查文档,找到相应事件产生的函数原型(或者说产生信号的函数signal)

2、声明、定义一个信号处理函数(槽),参数形式应该和signal的参数形式一致

3、将信号和槽用connect函数关联

前两步的示例如下:

//.h文件
private slots:
    int OnShowClicked(bool checked);
   
//.cpp文件
int XXX::OnShowClicked(bool checked)
{
    retunr 0;
}

接下来做一个练习:

设计如下界面,并实现当点击按钮后,触发自己定义的事件,使下方的文本框显示一行内容

【Qt学习笔记】4.事件处理

实现代码如下:

//.h
class Test4_1a_11_29 : public QMainWindow
{
    Q_OBJECT

public:
    Test4_1a_11_29(QWidget *parent = Q_NULLPTR);

private slots:
	int OnShowClicked(bool checked);

private:
    Ui::Test4_1a_11_29Class ui;
};


//.cpp
Test4_1a_11_29::Test4_1a_11_29(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	connect(ui.btnShow, SIGNAL(clicked(bool)), this, SLOT(OnShowClicked(bool)));
	//connect的参数 : 对象QObject* A  ,   A的信号(SIGNAL), 对象QObject* B  , B的槽(SLOT)    A为产生信号的对象, B为处理信号的对象
}

int Test4_1a_11_29::OnShowClicked(bool checked)
{
	ui.QPlainTextEdit1->setPlainText("change world");
	return 0;
}

二、connect的注意要点

响应函数(槽)要用slot关键字修饰

参数SIGNAL和SLOT函数都要大写

clicked和SLOT函数中的参数,注意只有类型

通过返回值判断connect()函数执行是否成功。

但我发现,只能用false判断,而不论connect() == true 还是 true == connect()的形式都是无法通过的,而如果非要用true,则需要对connect的返回值进行一次强制转换:

assert(true == (bool)connect(ui.btnShow, SIGNAL(clicked(bool)), this, SLOT(OnShowClicked(bool))));

【Qt学习笔记】4.事件处理

原因待探查

尾巴:

检查connect的返回值,如果出错,可以用qDebug()函数打印调试信息,但用这种方法打印的提示信息只有在调试状态下可见。

既然这样,用assert()是不是更方便呢?


新闻标题:【Qt学习笔记】4.事件处理
网页链接:http://cdkjz.cn/article/pcjpsj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220