Qt_01

概述


Qt是什么?

Qt是一个跨平台的C++图形用户界面应用程序框架。它是完全面向对象的,很容易扩展,并且允许真正的组件编程


优点:

  • 跨平台
  • 接口简单
  • 简化了内存回收
  • 支持嵌入式开发

成功的案例:

  • Linux桌面环境KDE
  • WPS office办公软件
  • Google Earth谷歌地图
  • VirtualBox虚拟机软件



项目


创建的项目名不能有中文这是常识,而且该软件也不会允许你创建包含中文的项目;你项目所在的路
径,也不能有中文,但它不会报错,只是不能运行


基类

在创建项目时,要创建用户图形界面,都是通过继承Qt中已有的基类,然后再实现;这里有三种基类可选,QWidgetQMainWindowQDialog,前者派生出后面两个。

QWidget,创建一个空窗口
QMainWindow,创建一个带有菜单栏,状态栏等的窗口
QDialog,创建一个对话框窗口,就比如在创建项目时,让你选择继承基类的选择项,下一步或上一步的按钮等



组件开发

在创建时,会有一个选项,可以选择创建界面,同时会生成一个.ui,这个其实就是组件开发,是软件自带的一些组件式的代码块,在软件的界面左侧有个设计的按钮,可以选择组件,直接拖拽进代码当中



项目管理

emmm,团队开发软件,svn,git等
这个后面再去了解



默认生成的文件解释


工程文件

工程文件.pro大概有一下几个内容


QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

第一行QT += core gui,表示添加 coregui 模块
当需要网络互联network或者多媒体mulitmedia等的技术支持时,就需要手动添加模块


第二行greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
大于4版本,加入widgets模块


后面三行就是使用C++11的标准进行编译源文件头文件


以前的版本还会有两行

TARGET = QT01
TEMPLATE = app

TARGET就表示编译连接生成的.exe文件的名称
TEMPLATE模板,就是应用程序app模板





头文件

#ifndef WIDGET_H
#define WIDGET_H


#include <QWidget>					// Qt提供的三大基类之一

class Widget : public QWidget
{
    Q_OBJECT					// 提供信号和槽的机制   若没有定义则无法使用信号和槽
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};


#endif // WIDGET_H

第一二行和最后一行,作用是防止头文件重复包含

宏,就是一些命令组织在一起,作为一个单独命令完成一个特定任务;



源文件

main()
#include "widget.h"				// 自行创建的继承QWidget空窗口的派生类的头文件 
#include <QApplication>  		// 应用程序的头文件

//argc 命令行变量参数的数量   argv[]命令行数字  
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);		// 应用程序对象  
    								// 每个项目只能有一个 a   且不能没有
    Widget w;						// 创建一个自定义窗口
    w.show();						// 窗口对象默认不会弹出  需要自行调用show()
    return a.exec();				// a.exec() 进入消息循环机制   阻塞代码
 									// 若是return 0  窗口会出现但又马上关闭 因为程序运行完毕了   								
}

这些默认生成的代码,肯定就是有用的,别乱动就没事



快捷键

CTRL + R  				运行
CTRL + B  				编译
F1		  				帮助文档     // 两下F1可以到大窗口的帮助文档 Esc退出

CTRL + SHIFT + ↑ 或 ↓   整行代码移动 
CTRL + i				自动对齐 
CTRL + F4				同名之间的.h和.cpp切换   




对象树

在讲对象树前,先说说按钮这个类,头文件是#include <QPushButton>

#include "widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *btn = new QPushButton;
 	btn->show();   
    
}

Widget::~Widget()
{
}

此时运行main(),结果是这样的

在这里插入图片描述

但我本意是想让btn对象依赖在Widget空窗口对象上,而不是通过show()函数,直接展示在顶层

这时候,就需要用到对象树了;通俗来说,就是给btn找一个爸爸,如影随形

	// btn->show()
	btn->setParent(this);		// this就指向Widget对象

	// 也可以在创建是直接将btn依赖在Widget这个父亲上
	QPushButton *btn = new QPushButton(this);

在这里插入图片描述

在这里插入图片描述

每当new一个新的对象时,都可以给该对象找一个parent,这样逐渐能形成一棵树,而当程序结束时,只需要对该树的根对象操作,然后Qt会从根对象开始寻找,寻找到叶子对象为止,开始释放对象
简单来说,创建对象是从根往叶子,而释放则是搜寻到叶子才开始释放
所以对象树的好处就是,简化了程序释放空间的步骤。




记录一些函数

	// 设置按钮
	QPushButton *btn = new QPushButton(this);
	btn->setText("按钮");
	btn->move(100,100);					// 设置在窗口上的坐标
	btn2->resize(30,30);				// 设置大小
	btn->setGeometry(100,100,30,30);	// 设置坐标及大小


	// 设置窗口
	this->setFixedSize(600,400);		// 固定窗口大小
	this->setWindowTitle("!!");			// 窗口名
		
	




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值