Qt入门极简教程(一)

目录

《Qt概述》

《QtCreator简介》

QtCreator界面的介绍:

创建一个工程:

《命名规范以及快捷键》

工程文件 .pro文件解释:

命名规范:

快捷键:

《QPushButton创建》

《对象树》

《Qt的窗口坐标系》

《信号和槽-点击按钮关闭窗口》

《自定义信号和槽》

自定义信号:

自定义槽:

触发自定义信号

《自定义信号和槽发生重载的解决》

需要利用函数指针 明确的指向函数地址

QString 转为char*

《信号连接信号》

《Qt4版本的信号槽连接》

《Lambda表达式》

1. 最简单的Lambda表达式,函数声明:[](){}

2. 函数调用:在声明后加一对小括号:

3. 关键字mutable

4.Lambda表达式用法


《Qt概述》

Qt是跨平台、C++面向对象的、图形用户界面应用程序
1990年奇趣科技开发
是Linux桌面环境KDE的基础
2014年开始跨平台了
Qt版本:商业版、开源版(帮助文档)
Qt安装:傻瓜式next,测试一般以最快的速度测试。
Qt的优点:
        跨平台、简化了内存回收机制、可支持嵌入式开发
Qt成功案例:
        Linux桌面环境、WPS、google earth、网络电话、…

《QtCreator简介》

QtCreator界面的介绍:

欢迎/编辑/设计/Debug/帮助/…
运行/调试/编译

创建一个工程:

a. Qt Weidget Application
b.Location 选择路径(英文路径)
c.Kits 构件套件,高低版本搭配
d.Detail类的信息,QWidget/QMainWindow/Qdialog
汇总 svn git

main函数介绍:
#include<QApplication> 包含应用程序的头文件
int main() {
    Qapplication a(argc, argv); 应用程序对象有且仅有一个
    //实例化一个窗口对象   mywidget父类->QWidget
    myWigget w;
    //窗口对象默认不显示
    w.show();
    //让应用程序对象进入消息循环机制,代码阻塞当前行
    return a.exec();
}

《命名规范以及快捷键》

工程文件 .pro文件解释:

QT += core gui   //Qt包含的模块
//大于版本4以上,包含widget模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = FirstProject //目标  生成的 .exe程序的名称
TEMPLATE = app  //模板 应用程序模板 还有lib模板
SOURCES +=main.cpp\
                       mywidget.cpp
HEADERS += mywidget.h

mywidget.h 头文件解释

classmyWidget : public Qwidget
{
    Q_OBJECT //宏,允许类中使用信号和曹机制
}

命名规范:

类名 首字母大写、单词之间首字母大写
函数名/变量 首字母小写,单词之间大写

快捷键:

注释 ctrl + /
编译 ctrl + b
运行 ctrl + r
字体缩放 ctrl + 滚轮
查找 ctrl + f
自动对齐 ctrl + i
同名之间的.h / .cpp切换  F4
帮助文档 第一种:F1/esc,第二种 左侧按钮"帮助",
第三种:安装目录bin中的Qt助手

《QPushButton创建》

默认编码为utf-8(中文不会出现乱码)
查询Qt助手 了解所属类,模块,公共函数等

QPushButton *btn = new QPushButton;
// btn->show(); show以顶层方式弹出窗口控件
//设置父亲  让btn按钮依附于myWidget窗口中
btn->setParent(this);
//显示文本
btn->setText("balabala");
//移动窗口
btn->move(x, y);

//重置窗口的大小
resize(int w, int h); // 600*400
//设置固定窗口大小
setFixedSize(w, h);
//设置窗口标题
setWindowTitle("第一个窗口");

《对象树》

最祖宗辈的QObject对象
窗口做释放的时候,它会把其中所有的对象都给释放
当创建的对象在堆区的时候,如果指定的父亲是QObject或者是QObject派生下来的类,则可以不用管理释放操作。因为对象会放入对象树中。

《Qt的窗口坐标系》

Qt的(0,0) 点在左上角,X→,Y↓

《信号和槽-点击按钮关闭窗口》

connect(信号的发送者发送的信号信号的接收者处理信号(槽))
信号和槽属于松耦合关系:信号和槽没有关系,用connect关联起来而已
打开帮助文档,查看组件的信号和槽函数,(signal和slot)
eg:connect(myBtn, &myPushButton::click, this, myWidget::close);

《自定义信号和槽》

自定义信号:

// 自定义信号,写在signals下
// 返回值是 void,只需要声明,不需要实现
// 可以有参数,可以重载

自定义槽:

// 早起的qt版本,必须卸载public slots下;高级版本则不考虑位置
// 返回值void;需要声明,也需要实现
// 可以有参数,可以重载

触发自定义信号

emit 自定义信号

《自定义信号和槽发生重载的解决》

需要利用函数指针 明确的指向函数地址

// 函数指针指向函数地址
// 成员函数的指针前面要加上作用域
void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;
void (Student::*studentSlot)(QString) = &Student::treat;

QString 转为char*

1. qDebug()<<"请老师吃饭,给他吃:"<<foodname.toUtf8().data()
2. qDebug()<<"请老师吃饭,给他吃:"<<foodname.toStdString().c_str()

《信号连接信号》

emit可以触发信号
函数指针指向重载过后的信号槽,
槽的实现可以使成员函数,也可以使lambda表达式
信号可以触发信号
断开信号 disconnect

《Qt4版本的信号槽连接》

拓展:

  1. 信号可以连接信号
  2. 一个信号可以连接多个槽函数
  3. 多个信号可以连接同一个槽函数
  4. 信号和槽函数的参数类型必须一致,但是个数可以不同,且信参个数>=槽参个数

Qt4版本:connect
// Qt4底层实现 SIGNAL("hungry"),SLOT("treat").
connect(zt, SIGNAL(hungry(QString)), st, SLOT(treat()));
优点:参数直观
缺点:类型不做检测
Qt5以上,支持Qt4版本的写法,反之不行。

《Lambda表达式》

lambda表达式是c11的新特性。
PS:在Qt5.4版本前,需要在.pro文件中,增加一个配置选项 CONFIG=C++11

1. 最简单的Lambda表达式,函数声明:[](){}

=:值传递
&:引用传递
a:值传递
=,&a,&b:除了a,b按引用传递,其他按值传递
&,a,b:除了a,b按值传递,其他按引用传递

2. 函数调用:在声明后加一对小括号:

    [](){***
    }();

3. 关键字mutable

可以修改按值传递进来的变量的拷贝,而不是变量本体
[m] () mutable {m = 100 +10; qDebug()<<m; }

4.Lambda表达式用法

// 点击按钮,关闭窗口
connect(brn, &QPushButton::clicked, this, [=](){
this->closed();
emit tz->hungry("老师来了"); 
//优点,lambda表达式可以是的无参信号触发有参槽函数
});
PS:如果connect的第三个参数是this,第四个参数是Lambda表达式的时候,this可以省略

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

☜@_@达奚黑雁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值