当前位置:   article > 正文

QT概述--QT5

qt5

QT概述

1.1什么是QT

Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形用户界面所需的所有功能。

Qt是诺基亚公司的一个产品。1996年,Qt进入商业领域,已成为全世界范围内数千种成功的应用程序的基础。它也是目前流行的Linux桌面环境KDE 的基础,KDE是Linux发行版的主要一个标准组件。

Qt 支持的平台有:

MS/Windows—95、98、NT 4.0、ME、2000、XP和Vista;

UNIX/X11—Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、

SGI IRIX和其他很多X11平台;

Macintosh—Mac OS X;

Embedded—有帧缓冲(framebuffer)支持的Linux平台、Windows CE;

Symbian/S60—目前已经可以提供技术预览版本。

1.2QT的安装

您可以到QT官网https://www.qt.io/选择对应的安装包之后进行下载安装

当然,现阶段QT不再支持某些版本的在线安装,您可以到https://download.qt.io/下载镜像的在线安装
在这里插入图片描述
在这里插入图片描述

等待安装完成之后即可

1.3第一个QT Demo

首先,恭喜你安装成功了你的QT,接下来我们进行第一个demo的开发,实现一个输入半径求面积的程序。
在这里插入图片描述

我这里使用CMake作为项目管理工具。CMakeList文件如下,你可以先不用关注CMakeList文件的编写,按照我的文件即可使用(在这之前你需要将你的QT bin目录配置到环境变量中)

1.3.1CMakeList.txt

cmake_minimum_required(VERSION 3.19)
project(Test VERSION 1.0.1)

#指定输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/output)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/output)
#指定C++标准
set(CMAKE_CXX_STANDARD 17)
#自动编译QT文件

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#开启包含当前编译目录
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#指定QT版本和对应的库
set(QT_VERSION 5)
set(REQUIRED_LIBS Core Gui Widgets)
set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets)
#寻找QT库
find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
#自动查找头文件路径函数
macro(FIND_INCLUDE_DIR result curdir)                                        #定义函数,2个参数:存放结果result;指定路径curdir;
    file(GLOB_RECURSE children "${curdir}/*.hpp" "${curdir}/*.h" )           #遍历获取{curdir}*.hpp和*.h文件列表
    file(GLOB SOURCE_INCLUDE ${children} )                                   #将文件放入 SOURCE_INCLUDE 中
    set(dirlist "")                                                          #定义dirlist中间变量,并初始化
    foreach(child ${children})                                               #for循环
        string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})              #字符串替换,/前的字符替换/*h
        if(IS_DIRECTORY ${LIB_NAME})                                         #判断是否为路径
            list (FIND dirlist ${LIB_NAME} list_index)                       #判断dirlist是否含有${LIB_NAME}
            if(${list_index} LESS 0)
                LIST(APPEND dirlist ${LIB_NAME})                             #将合法的路径加入dirlist变量中
            else()
            endif()                                                          #结束判断
        endif()
    endforeach()                                                             #结束for循环
    set(${result} ${dirlist})                                                #dirlist结果放入result变量中
endmacro()
#自动查找源文件路径函数
macro(FIND_SRC_DIR result curdir)
    file(GLOB_RECURSE children "${curdir}/*.cpp" "${curdir}/*.cc")
    file(GLOB SOURCE_SRC ${children} )
    set(dirlist "")
    foreach(child ${children})
        string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})
        if(IS_DIRECTORY ${LIB_NAME})
            list (FIND dirlist ${LIB_NAME} list_index)
            if(${list_index} LESS 0)
                LIST(APPEND dirlist ${LIB_NAME})
            else()
            endif()
        endif()
    endforeach()
    set(${result} ${dirlist})
endmacro()
#调用函数,指定参数
FIND_SRC_DIR(SRC_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
FIND_INCLUDE_DIR(INCLUDE_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
#将INCLUDE_DIR_LIST中路径列表加入工程,包括第三方库的头文件路径
include_directories(
        ${INCLUDE_DIR_LIST}                                            #INCLUDE_DIR_LIST路径列表加入工程
)
#增减windows库文件
if(WIN32)
    set(PLAT_FROM_DEP
            ws2_32.lib
            )
endif()

# 指定格式为utf-8
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
#使用指定的源文件来生成目标可执行文件
add_executable(${PROJECT_NAME} WIN32 main.cpp
        ${SOURCE_INCLUDE} ${SOURCE_SRC} ${UI_INCLUDE})
#set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
set_target_properties(${PROJECT_NAME} PROPERTIES
        CMAKE_MSVC_RUNTIME_LIBRARY_RELEASE "MultiThreaded$<$<CONFIG:Release>:Release>")
#链接对应的库文件
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBS_QUALIFIED})
if(WIN32)
    target_link_libraries(${PROJECT_NAME} ${PLAT_FROM_DEP})
endif()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

1.3.2你的项目目录需要像我一样配置

在这里插入图片描述

1.3.3在src目录下新建circle.cpp和.h文件

main.cpp

#include <QApplication>
#include "circle.h"
int main(int argc,char *argv[])
{
    QApplication app(argc, argv);
    Circle c;
    c.show();
    return app.exec();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

circle.cpp

#include "circle.h"
#include <QPushButton>

Circle::Circle(QWidget *parent) :
        QWidget(parent)
{
    QGridLayout *layout1 = new QGridLayout(this);
    edit_         = new QLineEdit(this);
    edit_label_   = new QLabel("半径:",this);
    result_       = new QLineEdit(this);
    result_->setReadOnly(true);
    result_label_ = new QLabel("结果:",this);
    QPushButton *button = new QPushButton("计算",this);
    connect(button,&QPushButton::clicked,this,&Circle::btnClicked);
    layout1->addWidget(edit_label_,0,0);
    layout1->addWidget(edit_,0,1);
    layout1->addWidget(result_label_,0,2);
    layout1->addWidget(result_,0,3);
    layout1->addWidget(button,1,3);
    setLayout(layout1);
}

Circle::~Circle()
{

}

void Circle::btnClicked()
{
    double r = edit_->text().toDouble();
    double area = r*r*3.14;
    result_->setText(QString::number(area));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

circle.h

#ifndef TEST_CIRCLE_H
#define TEST_CIRCLE_H

#include <QWidget>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>

class Circle : public QWidget
{
    Q_OBJECT
public:
    explicit Circle(QWidget *parent = nullptr);

    ~Circle() override;

protected slots:
    void btnClicked();

private:
    QLineEdit *edit_;
    QLabel    *edit_label_;
    QLineEdit *result_;
    QLabel    *result_label_;
};


#endif //TEST_CIRCLE_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/110003
推荐阅读
相关标签
  

闽ICP备14008679号