【Qt学习笔记】1:认识和使用Qt,信号槽,创建Qt的GUI程序
Qt5的安装很方便,在官网下载后直接安装即可,也不去使用VS,而是用自带的Qt Creater开发环境。
安装时只需要选择版本下的一个MinGW工具即可,而Qt Creater则会在Tool下自动勾选。
风格定制
使用黑色主题
使用真实制表符严格对齐
Qt默认的Tab是四个空格,改一下。
Ctrl+A全选后Ctrl+I可以自动对齐代码。
Qt的HelloWorld
它也和普通的C++程序一样从主函数开始执行,只是不要return 0结束程序了,而是将控制权交给Qt来处理,进入事件循环。
#include <QApplication>//管理GUI程序的控制流和主要设置
#include <QLabel>//文本或图像的显示类
int main(int argc, char *argv[])
{
//对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象
//传入主函数传进来的参数以构造这个QApplication对象
QApplication a(argc, argv);
//传入字符串以用文本去建立一个QLabel对象
QLabel label("大傻逼刘知昊,来学Qt");
//显示这个QLabel
label.show();
//把程序运行交给Qt处理,进入事件循环
return a.exec();
}
输出:
注意在Qt中不怎么使用类名* 对象指针=new 构造器(构造器参数);的方式,因为后面当窗口开着时事件循环没有退出,exec()方法还在继续,而无法预料的时候窗口关闭了,exec()方法将退出,这时没法很好的维护这种堆空间内存,而总是去让OS回收。
所以可以使用类名 对象(构造器参数);的方式在栈空间里直接用。
connect方法和信号槽
信号槽是指事件发生时的对象会广播出一个信号,表示发生了该事件,而由其它对象可以考虑接受这个信号以做出响应。
connect(信号源对象A,发送的信号B,接收者对象C,调用函数D);
即A发出B信号后,C接收到后将调用D方法。其中接受者对象可以省略,即connect方法也被重载了多种具体的传参方式。
按下后退出的例子
#include <QApplication>
#include <QPushButton>//按钮类
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//建立一个按钮,传入按钮上的文字
QPushButton qpb("退出按钮");
//按钮qpb的clicked事件发生(发出该信号)时,将调用默认的QApplication对象的quit方法退出
QObject::connect(&qpb,&QPushButton::clicked,&QApplication::quit);
//显示按钮
qpb.show();
return a.exec();
}
按下后在控制台输出的例子
还可以使用lambda表达式,原来C++也有这个:
#include <QApplication>
#include <QPushButton>//按钮类
#include <QDebug>//可以用来调试,和控制台交互
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//建立一个按钮,传入按钮上的文字
QPushButton qpb("退出按钮");
//按钮qpb的clicked事件发生(发出该信号)时,将传true给这个lambda表达式的bool参数
QObject::connect(&qpb,&QPushButton::clicked,[](bool){
//相当于C++的cout,用来向控制台输出文本以调试
qDebug()<<"这个lambda表达式执行了,因为接收到了qpb的clicked事件";
});
//显示按钮
qpb.show();
return a.exec();
}
要在.pro工程文件结尾添加:
QMAKE_CXXFLAGS += -std=c++0x
观察者模式
即M-V(模型-视图)模式,是由模型发生变化时去向所有使用该模型的视图发出通知。Qt中的信号槽就是一种观察者模式的实现。
观察者对象为了获得被观察者对象发出的”变化”信号,需要被放置在一个被观察者能够操作的容器中,让被观察者发生变化时,就会从容器中取得观察者向其发送”我发生变化了”这样的通知。
一个GUI的HelloWorld
创建Qt项目时把基类选择成QDialog能比较方便的快速构建一个带窗体的工程。
双击左侧生成的lzhdialog.ui配置文件可以进入设计界面的模式。
看起来和VB很像,拖动就可以去设计这个界面了。拖进去一个Label,写点字,运行一下:
智能推荐
【Qt基础】1.Qt入门 按钮创建、信号和槽
1 环境配置与Qt的安装 Qt的安装与配置可以参考这篇博文: https://www.cnblogs.com/wzzkaifa/p/7199265.html Qt 5.5.0开源版本下载: http://pan.baidu.com/s/1bn9Bcdx 2 创建第一个Qt程序 点击创建项目后,选择项目路径以及 给项目起名称 名称 不能有中文 不能有空格 路径 - 不能有中文路径 默认创建有窗口类,...
QT的信号和槽函数的使用(一)
一,信号的使用 语法: 参数解释: sender:发出信号的对象 signal:发送对象发出的信号 receiver:接收信号的对象 slot:接收对象在接收到信号之后所需要调用的函数(槽函数) 自带信号的槽函数的使用案例 二,自定义的信号处理事件 1. newspaper.h头文件 2.newspaper.cpp实现 3.Reader.h头文件 4.实现 测试: 三,总结 QT的信令就是IOC控...
linux上安装Qt4.8.6+QtCreator4.0.3
一、Qt简介 Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt很容易扩展,并且允许真正地组件编程。 准备工作 操作系统:centos6.5 位数:64位 二、安装 1、获取源码Qt4.8.6 2、获取源码QtCreator4.0.3 2、安装QtCreator4.0.3 进入QtCreator安装界面,指定...
react-native metro 分析
文章目录 前言 概念 Resolution Transformation Serialization 打包方式 Moudles Plain bundle Indexed RAM bundle File RAM bundle 流程 前置流程 resolve流程 Transformer流程 序列化流程 缓存 为什么要缓存 缓存的请求与缓存 Metro配置 结构 前言 metro是一种支持ReactNa...
嵌入式Linux——应用调试:用户态打印段错误信息
简介: 很多时候我们会遇到段错误:segmentation fault,而段错误有时是由内核引起的,有时是由应用程序引起的。在内核态时,发生段错误时会打印oops信息,但是在用户态时,发生段错误却只会打印segmentation fault而并不会打印其他的信息。所以本文主要介绍在用户态时,通过修改内核设置和添加启动参数来打印引发segmentati...
猜你喜欢
springboot1.4.1整合logback 遇到的问题
springboot1.4.1整合logback 遇到的问题 项目使用了springboot1.4.1整合logback,然而设置的过期时间15 并没有生效, 2GB达到2G自动删除也没有生效,仅仅实现了按大小分割。 经过查看pom 父工程内的源码发现是默认的logback版本是1.1.7,而过期时间配置是在logback 1.1.8以后才支持的。 不得不说这是springboot1.4.1 的b...
记一次C/S架构的渗透测试
概述 目标站点是http://www.example.com,官网提供了api使用文档,但是对其测试后没有发现漏洞,目录、端口扫描等都未发现可利用的点。后发现官网提供了客户端下载,遂对其进行一番测试。 信息收集 先抓了下客户端的包,使用Fiddler和BurpSuite都抓不到,怀疑走的不是HTTP协议,用WireShark查看其确实用的是HTTP协议,但是数据包不好重放,这里最后使用了WSExp...
Linux:结合Securecrt进行文件上传(lrzsz)P2
1、安装rzsz软件 2、点击Scurecrt的option——X/Y/Z配置上传和下载目录 3、首先在Linux里切换到一个目录,然后用rz命令,文件就会上传到钙Linux的目录下 只要敲rz即可,然后在弹出的对话框里选择需要上传的文件即可 4、下载文件用sz 下载单个文件:在当前目录下有该文件 sz filename 下载...
SQL 提示作为 布局 生存工具指南
下面是一些展示AdventureWorks中表现最好的销售人员并列出他们的经理的结构化查询语言代码。 它产生以下结果。 所以,代码是有效的,但它是丑陋的。 如果我需要理解和改进代码,我首先需要把它变成可读的形式。 我有结构化查询语言提示,所以我可以按下计算机的ctrl按键键 踢你自己),它会应用默认的内置代码样式,并对此进行修复。 不,不是,因为我相信你仍然不喜欢它的格式。 没有两个开发人员能够就...
Vue+Springboot解决数据传输时参数格式不匹配问题
前端:使用的是ant design vue ,端口号为8000 后端:使用的是springboot框架开发,端口号为8080 需求:已经解决跨域问题,前端发送登录的信息给后台,后台接收不到 样例: 前端: 后台: 请求的数据格式为json格式,后台参数类型不匹配 解决方案 第一种: 修改后端,参数类型: 第二种方式: 在前端vue框架中加入qs插件,qs 是一个增加了一些安全性的查询字符串解析和序...
