1.来吧,认识下基本控件和常用函数,希望你记住这张图:
1.1我们先熟悉下QWidget都有哪些常用的API
api-1:QWidget::show();//显示窗口
api-2:QWidget::move(x,y);//移动窗口
api-3:QWidget::resize(w,h);//重绘窗口的大小
api-4:setFixedSize(x,y);//设置固定尺寸
api-5:setWindowTitle(const char* value);//设置窗口的Title
api-6:setPalette(Palette plt);//设置调色板
1.2基本交互事件
怎么使用,先来个最简单的鼠标点击事件mousePressEvent(QMouseEvent evt)
要完成一个鼠标点击并响应执行相应操作的事件,我们需要做两件事
a.发送一个信号给这个对象
b.重写这个对象的响应事件
对于mouse的事件的信号,你觉得没有人发,然后你越发的确认,mousePressEvent(QMouseEvent evt)绝对是默认接收了鼠标的信号,所以,你想,你已经不需要再去发送这样一个信号给QWidget了。现在,你需要重写这个响应事件
你复习了c++,你知道,一个类分为头文件和源文件,头文件负责定义字段,包括变量和方法名,而源文件负责实现方法。
于是你创建了一个event_test的类:
event_test.h
#ifndef EVENT_TEST_H
#define EVENT_TEST_H
#include<QWidget>
#include<QMouseEvent>
#include<QLabel>
class event_test
:public QWidget
{
public:
event_test();
void mousePressEvent(QMouseEvent *evet);
QLabel *qlb;
};
#endif // EVENT_TEST_H
event_test.cpp
#include "event_test.h"
#include<QMouseEvent>
#include <iostream>
#include<QWidget>
#include<string>
using namespace std;
event_test::event_test():QWidget()
{
}
void event_test::mousePressEvent(QMouseEvent *event){
static int val = 0;
std::string pi = "click times = " + std::to_string(val);
this->qlb->setText(pi.c_str());
val++;
}
你重写了mousePressEvent
你通过栈对象的方式声明了这个Widget,然后,,,
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
event_test w;
w.show();
QLabel qlb(&w);
qlb.resize(300,100);
qlb.show();
w.qlb = &qlb;
return a.exec();
}
你运行了这个窗口,并点击这个窗口
你发现,这个窗口成功的响应了点击事件。
这个时候,你其实会不由自主的想到一些更加便利的能够实现鼠标点击事件的方式,于是你回想起在C#中存在委托,用来描述匿名函数,java也支持lambda表达式实现匿名函数,那么c++有没有呢?你不经发出疑问
于是你去搜索怎么实现c++的匿名函数
你发现,暂时没有通过匿名函数重写mousePressEvent的方式,但是你开始接触信号槽,于是,你有了奇妙的想法,在此之前,你先出门吃点东西。