首页 > 编程语言 >快速入门 QT5 C++基础

快速入门 QT5 C++基础

时间:2024-09-16 22:58:54浏览次数:12  
标签:QT5 入门 C++ mainwindow public ui include MainWindow QT

1.QT5中文显示乱码

方法一:

system("chcp 65001");  // 放在主函数中

方法二:

首先引入库  

#include "windows.h"

再在主函数中写 

  SetConsoleOutputCP(CP_UTF8);

2.什么是类,如何创建一个类

#include <iostream>
#include "windows.h"

using namespace std;
class Dog{
// 类的成员不仅可以是变量,还可以是函数   --》对象
public:
    string name;
    int age;
    void out_tlc(void)
    {
        cout << age << endl;
    };
protected:
    float weight;

private:


};

int main()
{
    SetConsoleOutputCP(CP_UTF8);
//    system("chcp 65001");
    //从栈中实例化对象
    Dog Dog1;
    Dog1.name = "张三";
    Dog1.age = 3;
    cout << Dog1.name <<" "<<Dog1.age << endl;
    Dog1.out_tlc();

    //从堆中实例化对象
    Dog *Dog2 = new Dog;
    Dog2 ->name = "李四";
    Dog2 ->age = 2;
    cout<< Dog2->name << " "<< Dog2->age << endl;
    Dog2->out_tlc();
    delete Dog2;  // 用new之后一定要用delete

    return 0;
}

3.构造函数与析构函数

#include <iostream>
#include "windows.h"

using namespace std;
class Dog{
public:
    Dog()  // 构造函数 开始时
    {
      cout << "牛逼!!" << endl;
    };

    ~Dog(); // 析构函数 被销毁时

};

Dog::~Dog()  // 在Dog的作用域下
{
   cout<< "析构函数被调用了!!" << endl;
}

int main()
{   SetConsoleOutputCP(CP_UTF8); // 中文
    // 栈
//    Dog Dog1;
//    cout << "Hello World!" << endl;


    // 堆
    Dog *Dog2 = new Dog;
    delete Dog2;
    return 0;
}

4.类的继承

#include <iostream>
#include "windows.h"

using namespace std;

//继承
// 基类 也叫父类
class Anmial{

public:
    string name;
    int age;
    void my_naem(void)
    {
      cout << name << age << endl;
    };
};

//派生类 也叫子类
class Dog: public Anmial  // 只能访问基类中的public 和 protected 成员
{
public:
    void eat(void)
    {
        this->name = "李四";
        this->age = 5;
    };

};

/*
protected Anmial和 private Anmial都只能访问基类中的public 和 protected 成员
派生类的对象不能访问基类的任何成员
*/

int main()
{   SetConsoleOutputCP(CP_UTF8);

    Dog Dog1;  // 派生类的对象只能访问基类的public成员
    Dog1.age = 1;
    Dog1.name = "小三";
    Dog1.my_naem();
    Dog1.eat();
    Dog1.my_naem();
    return 0;
}

5.函数重载

#include <iostream>
#include "windows.h"

using namespace std;

// 函数重载
class Dog{
public:

    Dog(int age)
    {
        cout << "int类型" << age <<endl;

    };
    Dog(double age)
    {
        cout << "double类型" << age << endl;
    };
    void get_weight(int weight)
    {
        cout << "int类型" << weight <<endl;
    };
    void get_weight(double weight)
    {
        cout << "double类型" << weight <<endl;
    };


};
int main()
{
    SetConsoleOutputCP(CP_UTF8);
    Dog Dog1(10);
    Dog Dog2(10.1);
    Dog Dog3(10);
    Dog3.get_weight(10);
    Dog3.get_weight(10.3);

    return 0;
}

6.Qtx项目文件

6.1 First.pro 是项目的管理文件,文件名就是项目的名称

QT       += core gui    # 此处加模块 后 可以加库到头文件中

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets  # QT4没有widgets模块

CONFIG += c++11  #2011年的c++标准

TARGET = DH

DEFINES += QT_DEPRECATED_WARNINGS  # API过时警告

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.   默认的部署规则
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin   #TARGET目标产物的名字 可以改
!isEmpty(target.path): INSTALLS += target

6.2 mainwindow.h  窗体类相关的文件

在其中定义了一个继承来自QWidget的类Widget

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow  //点击按F1进入文档
{
    // 宏定义 Qt信号槽需要它
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    int i;

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

6.3 main.cpp 主函数文件

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    // argc是命令行参数个数 ,argv是命令行参数
    // QApplication a(argc, argv) 管理QT程序的运行 和设置QT应用程序,针对QWidget应用程序
    // QGuiApplication a(argc, argv) 管理QT程序的运行 和设置QT应用程序,针对非QWidget应用程序,比如QQuick
    // QCoreApplication a(argc, argv) 管理QT程序的运行 和设置QT应用程序,针对无界面应用程序
    QApplication a(argc, argv);
    MainWindow w;     // Ctrl + i 对齐
    w.show();
    //事件循环,GEventLoop::exec(),等待键盘或鼠标等其他的输入
    return a.exec();
}


/*
 Ctrl + shift + enter 在上面编译
 Ctrl + enter 在下一行编译

*/

6.4 mainwindow.cpp 窗体类相关的文件

是widget的实现代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , i(4)  // i = 4
    , ui(new Ui::MainWindow)  // ui = new Ui::MainWindow

{
    ui->setupUi(this);
    qDebug() << "构造函数" << endl;
}

MainWindow::~MainWindow()
{
    qDebug() << "析构函数" << endl;
    delete ui;
}

6.5 mainwindow.ui

.ui文件是可视化设计的窗体的定义文件,双击项目可使用Qt Designer对窗体进行可视化设计。.ui是一个窗体界面定义文件,是一个xml文件,定义了窗口上的所有组件的属性设置、布局以及信号与槽函数的关联等。

7.Qt信号槽

 首先在空白处加入一个按钮

7.1 方法一:

添加一组信号槽,当 "按钮" "点击" 时 "主界面" "关闭 "。

7.2 方法二:

7.3 自定义方式

如果我想点击按钮时,在程序输出栏打印一段话。此时需要自定义函数。

之后跳转到 mainwindow.cpp文件下,此时已经自动创建好了函数。

如果想在输出栏打印,首先引入  #include <QDebug>


void MainWindow::on_pushButton_clicked()
{
    qDebug() << "按钮点击了" << endl;
}

就一行代码,写好之后点击运行。点击一次打印一次。

标签:QT5,入门,C++,mainwindow,public,ui,include,MainWindow,QT
From: https://blog.csdn.net/qq_47858494/article/details/142236947

相关文章

  • c++中utf8字符串和gbk字符串的转换
    这个功能C++语言本身似乎没有标准实现,需要借助于第三方库或者操作系统API。不得不吐槽一下这么重要的功能居然还没有办法依赖C++语言本身来实现,C++标准委员会真是不干人事啊。那就不废话了,直接给出windows下的实现。std::stringUtf8ToGbk(conststd::string&utf8Str){//St......
  • c++入门(七万字心得体会!!)分上下两篇(初阶+进阶)
    目录c++入门c++关键字命名空间命名空间定义命名空间使用c++输入输出缺省参数缺省参数概念缺省参数分类函数重载函数重载概念c++支持函数重载原理--名字修饰(name)引用引用概念引用特性常引用使用场景传值,传引用效率对比引用和指针的区别内联函数概念特性a......
  • WPF入门教学二 安装与配置WPF开发环境
    在安装与配置WPF(WindowsPresentationFoundation)开发环境时,您需要遵循一系列步骤来确保一切顺利进行。WPF是微软提供的一个强大的UI框架,用于构建Windows桌面应用程序。以下是详细的安装与配置指南:安装VisualStudio访问官方网站:访问MicrosoftVisualStudio官网,下载并安装适......
  • STM32入门教程:智能电机控制
    智能电机控制是STM32入门教程中的重要内容之一。本教程将以详细的代码案例来介绍如何使用STM32来控制智能电机。在开始之前,我们需要了解一些基本概念。智能电机通常由电机与控制器组成,控制器使用STM32等微控制器来实现对电机的控制。电机控制的最常见方式是使用PWM(脉宽调制)信......
  • STM32入门教程:身份证识别
    身份证识别是一种常见的图像处理应用,能够通过识别身份证上的文字信息,以获取身份证号码、姓名等重要个人信息。在本教程中,我们将使用STM32微控制器和相关的图像处理算法,来实现身份证识别功能。硬件准备首先,我们需要准备一块STM32开发板,以及相应的图像传感器。你可以选择使用......
  • STM32入门教程:LCD触摸屏控制
    STM32是一款广泛应用于嵌入式系统开发的微控制器系列,拥有强大的处理能力和丰富的外设接口。LCD触摸屏是一种通过触摸来控制显示内容的交互设备,常用于嵌入式系统中的人机交互界面。本教程将详细介绍如何使用STM32控制LCD触摸屏。一、硬件准备首先,我们需要准备以下硬件设备:STM......
  • C++入门基础知识71(高级)——【关于C++ 模板】
    成长路上不孤单......
  • C++20 span
    C++20span概念std::span<T,Extent>类模板就是一块连续内存的视图(类似于std::string_view),简化原本C风格的基制指针+长度的使用方式。模板形参:T:元素类型;必须是完整对象类型且非抽象类Extent:连续序列中的元素数,默认为动态长度(std::dynamic_extent)注意:span能拥有静......
  • 【C++】多态,要这样学
    ......
  • 碰撞检测:详解矩形AABB与OBB碰撞检测算法(附ROS C++可视化)
    碰撞检测:详解矩形AABB与OBB碰撞检测算法(附ROSC++可视化)引言在机器人、游戏开发、计算机图形学等领域,碰撞检测是一个至关重要的任务。碰撞检测的目的是确定两个或多个物体是否发生了碰撞,以便采取相应的措施,如避免碰撞、触发事件等。在二维空间中,矩形是最常见的几何形状之一,而AABB(Ax......