首页 > 编程语言 >C++客户端Qt开发——开发环境

C++客户端Qt开发——开发环境

时间:2024-07-13 21:25:53浏览次数:19  
标签:文件 QT C++ 生成 ui MyWidget 客户端 Qt

一、QT开发环境

1.安装三个部分

①C++编译器(gcc,cl.exe……)

②QT SDK

SDK-->软件开发工具包

比如,windows版本QT SDK里已经内置了C++的编译器(内置编译器是mingw,windows版本的gcc/g++)

③QT的集成开发环境(IDE)

  • 官方提供的QT Creator

最容易入门,最容易上手的方式,开箱即用,虽然QT Creator使用过程中存在不少bug(有些bug非常影响使用体验,但整体来说用起来挺方便,比较适合初学者)

  • Visual Studio

功能更强,但是需要额外的配置更多,更容易出错,有些公司开发商业QT的时候可能会使用VS,需要给VS安装插件,并且需要把QT SDK使用VS的编译器重新编译(现在也方便一些,有预编译好的版本)

  • Eclipse

Eclipse并非只是Java IDE,本身是一个IDE平台,可以搭配不同的插件构成不同的IDE

2.QT SDK的下载和安装

官网地址:Index of /archive/qt

最好选择一个比较稳定的版本

安装过程中选这个,QT SDK中内置的C++编译器

安装完成后配置环境(不是必须的)

找到安装目录,依次点击

把这个环境添加到系统的环境变量中

①QT自带的离线版本的官方文档

②QT设计师,图形化的设计界面的工具,通过拖拽空间的方式来快速生成界面,会经常搭配QTCreator来使用

③QT语言家,作用是对国际化进行支持,有的时候,写的程序要和国际接轨,允许单独创建一个语言配置文件,把界面上需要用到的各种文字都配置到文件中,并且在文件中提前把各种语言的翻译都配置进去,实现一键切换语言的效果

④命令行终端

⑤QT Creator,QT的集成开发工具

3.QT Creator

①创建新项目

新建项目,应用程序如果使用QT写一个GUI程序,就应该选择Application

构建系统,通过QT写的程序,涉及到一系列的“元编程”技术,通过代码来生成代码

QT框架会在编译的时候,自动调用一系列的生成工具,基于自己写的代码,生成一系列的其他C++代码,最终编译的代码,也是最后生成的这些代码

qmake:是老牌的qt构建工具

cmake:并非是qt专属,很多的开源项目都会使用cmake

Qbs:新一代的qt构建工具(用得少)

使用Qt Creator创建项目,会自动生成一些代码出来,生成的代码就包含一个类,此处就是要选择这个自动生成的类的父类是谁,QT中内置的类都是以Q前缀开头的

QMainWindows--完整的应用程序窗口

QWidget--表示一个控件(窗口上的一个具体元素:输入框,按钮,下拉框,单选按钮复选按钮等)

QDialog--表示一个对话框

自动变为widget名称,其中form file非常关键

Qt中创建图形化界面的程序有两种方式:

  1. 直接通过C++代码的方式创建界面
  2. 通过form file,以图形化的方式来生成界面

此时,就可以使用Qt Designer或者直接使用Qt Creator来编辑这个ui文件,从而以图形化的方式快速方便的生成图形界面

选择翻译文件,暂时不关注,这部分和国际化相关

选择一下基于哪个编译器的Qt SDK来构建后续代码

②项目自动生成的代码

#include "mywidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();
    return a.exec();
}

QApplication a(argc,argv);编写一个Qt的图形化界面程序,一定需要有QApplication对象

Mywidget w;Widget在创建项目的时候,填写了生成的类名,创建一个控件对象

.show()方法让空间显示出来

.hide()方法让空间隐藏

这些方法都是Widget的父类QWidget提供的

return a.exec();exec表示让程序执行起来(与linux中的exec没有任何关系,只是名字恰好一样)

#ifndef MYWIDGET_H
#define MYWIDGET_H
// 表示保证头文件只被包含一次,更推荐#pragma once

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE

// 创建项目时选择的父类,Qt SDK内置的,
// 要想使用这个类,就要包含这个头文件,
// 在Qt中,使用的类的头文件名称一样
class MyWidget : public QWidget 
{
    Q_OBJECT // 是Qt内置的宏,宏本质是文本替换
    // 展开后,会生成一大堆代码,Qt中有一个非常核心的机制,“信号和槽”
    // 如果某个类想使用“信号和槽”,就需要引入这个宏

public:
    MyWidget(QWidget *parent = nullptr); 
    // Qt中引用了“对象树”机制,对象给挂到对象树上
    // 往树上挂的时候就需要指定父节点(对象树就是一个普通的N叉树,不是二叉树)
    ~MyWidget();

private:
    Ui::MyWidget *ui; // 和form file密切相关
};
#endif // MYWIDGET_H

#ifndef MYWIDGET_H

#define MYWIDGET_H

表示保证头文件只被包含一次,更推荐#pragma once

class MyWidget : public QWidget 创建项目时选择的父类,Qt SDK内置的,要想使用这个类,就要包含这个头文件,在Qt中,使用的类的头文件名称一样

Q_OBJECT 是Qt内置的宏,宏本质是文本替换,展开后,会生成一大堆代码,Qt中有一个非常核心的机制,“信号和槽”,如果某个类想使用“信号和槽”,就需要引入这个宏

MyWidget(QWidget *parent = nullptr); Qt中引用了“对象树”机制,对象给挂到对象树上,往树上挂的时候就需要指定父节点(对象树就是一个普通的N叉树,不是二叉树)

Ui::MyWidget *ui; 和form file密切相关

#include "mywidget.h"
#include "ui_mywidget.h" //form file 被qmake生成的头文件

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
}

MyWidget::~MyWidget()
{
    delete ui;
}

#include "ui_mywidget.h"form file 被qmake生成的头文件

ui(new Ui::MyWidget){ ui->setupUi(this); }form file 生成的界面和当前widget关联起来

③form file文件 .ui

双击打开.ui文件,此时Qt Creator就会调用Qt Desiger,打开ui文件,图形化的界面编辑器

左侧就是Qt中内置的控件,拖拽左侧的空间到程序窗口中,就可以创建出具体的界面了

右侧黄色背景的事编辑属性,每个控件都有很多属性,会影响到控件具体行为

此时点击编辑按钮,就会看到.ui文件的具体内容

.proQt项目的工程文件,也是qmake工具构架时候的重要依据

QT += core gui要引入的Qt的模块,后面学习到一些内容的时候可能会修改这里

SOURCES += \
    main.cpp \
    mywidget.cpp

HEADERS += \
    mywidget.h

FORMS += \
    mywidget.ui

描述了当前项目中,参与构建的文件都有啥,编译器要编译哪些文件,这个地方不需要手动修改,Qt Creator会自动维护好

.pro 类似于linux中的Makefile

④ 中间文件

构建过程中会产生一些中间文件

右键点击.pro文件,然后点击在Explorer中显示,返回上一级会发现有一个同级文件夹

在运行一次程序后,就会在项目目录并列的地方,多出来一个“build-xxxxx”目录,这个目录里面就是该项目运行过程中,产生的一些临时文件(下图是因为创建的时候选了git)

编译Qt程序,还是会用到Makefile,但是不需要手动写,而是编译器会自动生成

ui_mywidget.hwidget.ui xml生成的.h文件

Empty.exe这就是最终生成的可执行程序,如果直接运行和在Qt Creator中运行时效果相同

.pro文件配置项:

  • TARGET: 指定生成的可执行文件的名称。
  • TEMPLATE: 指定项目的类型,例如应用程序(app)、库(lib)等。
  • SOURCES: 指定源代码文件的列表。
  • HEADERS: 指定头文件的列表。
  • LIBS: 指定需要链接的库。
  • QT: 指定项目所需的Qt模块。
  • DEFINES: 定义预处理宏。
  • QMAKE_CXXFLAGS: 指定编译器选项。
  • win32/unix/macx: 平台特定的配置,用于针对不同的操作系统设置特定的编译选项。

通过编辑.pro文件,开发者可以定制项目的构建过程,包括指定源文件、链接库、定义宏、设置编译选项等。在Qt项目中,.pro文件的灵活性和可定制性使得开发者能够更好地管理项目的构建和依赖关系。

标签:文件,QT,C++,生成,ui,MyWidget,客户端,Qt
From: https://blog.csdn.net/m0_63596031/article/details/140406738

相关文章

  • 推荐一个Elasticsearch ES可视化客户端工具:ES-King,支持win、mac、linux
    ES-King:开源免费,一个现代、实用的ESGUI客户端,支持多平台。下载地址:https://github.com/Bronya0/ES-King我之前开源的kafka客户端kafka-king(https://github.com/Bronya0/Kafka-King)已经有二百多star了,2k下载,后来又花了不少精力写了一个ES客户端,不过没怎么推广,于是写个文章介绍下......
  • C++ 入门基础:开启编程之旅
    引言C++是一种高效、灵活且功能强大的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统、科学计算等多个领域。作为C语言的扩展,C++不仅继承了C语言的过程化编程特性,还增加了面向对象编程(OOP)的支持,使得代码更加模块化、易于管理和复用。本文将带你走进C++的世界,从......
  • c++继承特点,菱形继承,访问方式,默认成员函数
    目录继承概念继承特性继承后成员访问的方式的变化子父类成员重命名派生类的默认成员函数​编辑菱形继承小tip继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,......
  • 【Qt 信号和槽】一篇文章带你详细的了解 Qt 的信号与槽
    文章目录1.信号和槽的基本概念2.`connect()`函数的用法......
  • 05day--C++日期类的实现与取地址运算符的重载
    这里写目录标题5.3⽇期类实现6.取地址运算符重载6.1const成员函数6.2取地址运算符重载5.3⽇期类实现Date.h#pragmaonce#include<iostream>usingnamespacestd;#include<assert.h>classDate{//友元函数声明friendostream&operator<<(ostream&......
  • C++11标准库<chrono>、<future>、 <atomic>、<condition_variable>、<mutex>、<t
    目录<chrono>时间间隔duration常用的duration时间点time_point时钟system_clock&steady_clocksystem_clock代码举例steady_clock(秒表)例程:转换函数1.duration_castDescription:duration支持隐式转换的规则2.time_point_cast<thread>this_thread命名空间1.get_id()2.sleep_f......
  • C++类和对象 前篇
    C++类和对象基础部分​众所周知,C语言是一门面向过程的语言,面向过程简单来说就是直接使用各种函数和数据来解决一件事。而面向对象是谁来使用函数和数据去解决一件事。​C++是一门既可以面向对象也可以面向过程的语言,它能够兼容C语言,并且对C语言进行了许多优化升级,其中......
  • Qt-事件过滤器、事件分发器、事件处理器
    前言Qt中事件的处理步骤1.当事件产生之后,Qt应用程序对象通过调用QApplication::notify()函数将事件发送到指定的窗口。2.事件在发送过程中可以通过向对象(窗口、按钮等)安装事件过滤器QObject::eventFilter()来对事件进行过滤。Qt应用程序默认不对任何产生的事件......
  • C++知识备忘及面试指导
    一、C++基础1.C和C++有什么区别?C语言C语言是纯面向过程的语言,不支持面向对象,函数名字不会被改编(函数不能重载)C语言的结构体只支持成员变量,不支持成员函数,成员没有访问控制(即没有publicprotectedprivate)C++C++是C语言的超集,同时支持面向过程和面向对象(类)函数名字编译......
  • C++利用类和对象封装立方体面积和体积
    C++利用类和对象封装立方体面积和体积1、说明2、代码3、总结1、说明C++利用类和对象进行封装立方体的面积和体积,对学过的知识进行总结,本代码并非原创。2、代码#include<iostream>#include<time.h>#include<string.h>#include<ctime>usingnamespacestd;//立......