卜若的代码笔记-一周搞定树莓派-第九章:QTCreator的基本控件

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的方式,但是你开始接触信号槽,于是,你有了奇妙的想法,在此之前,你先出门吃点东西。

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值