zoukankan      html  css  js  c++  java
  • QT5

    一.下载安装QT5

    QT是一个跨平台的C++图形用户界面应用程序框架,主要用来开发图形用户界面(Graphical User Interface,GUI)
    
    QT除了可以绘制漂亮的界面(包括控件/布局/交互),还可以多线程/访问数据库/图像处理/音视频处理/网络通信/文件操作等
    
    Windows下的GUI解决方案:QT/MFC/WTL/DirectUI
    
    Linux下的GUI解决方案:QT/GTK+
    QTSource和QTCreator的下载地址
    
     
    
    这里给大家推荐几个国内著名的 Qt 镜像网站,主要是各个高校的:
    
    中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
    清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
    北京理工大学:http://mirror.bit.edu.cn/qtproject/
    中国互联网络信息中心:http://mirror.bit.edu.cn/qtproject/
    https://www.qt.io/offline-installers
    https://download.qt.io/archive/qt/5.14/5.14.2/
    使用mingw编译,自带gcc编译器合gdb调试器(新手推荐)
    qt-opensource-windows-x86-mingw492-5.5.1.exe
    
    qt-opensource-windows-x86-msvc2013-5.5.0.exe
    qt-vs-addin-1.2.4-opensource.exe
    QT 3D Studio是为了设计师能够更好的专注于设计3D动画软件,而QT 3D模块是为了开发者能够更好的专注于开发代码
    QT 3D使用assimp库来加载3D文件格式

    1.模块

    (1)基础模块
    
    Qt Core
        提供核心的非GUI功能,所有模块都需要这个模块.这个模块的类包含了动画框架 定时器 各个容器类 时间日期类 事件 IO JSON 插件机制 智能指针 图形(矩形 路径等) 线程 XML等
    
        需要添加头文件<QtCore>
    
    Qt GUI
        提供GUI程序的基本功能,包含与窗口系统的集成 事件处理 OpenGL和OpenGL es继承 2D图像 字体 拖放等.这些类一般用于Qt用户界面类使用,也可以访问底层的OpenGL es图像API.
    
    Qt Multimedia
        提供视频 音频 收音机以及摄像头等功能
    
        需要在pro文件中添加 QT + = multimedia,需要添加头文件<QtMultimedia>
    
    Qt Network
        提供跨平台的网络功能
    
        需要在pro文件中添加 QT + = network,需要添加头文件<QtNetwork>
    
    Qt Qml
        提供QML(脚本语言,提供js交互机制)使用的C++ API
    
        需要在pro文件中添加 QT + = qml,需要添加头文件<QtQml>
    
    Qt Quick
        允许在程序中嵌入Qt Quick(一种基于Qt的高度动画的用户界面,适合移动平台开发)
    
        需要在pro文件中添加 QT + = quick,需要添加头文件<QtQuick>
    
    Qt SQL
        允许使用SQL访问数据库
    
        需要在pro文件中添加 QT + = sql,需要添加头文件<QtSql>
    
    Qt Test
        提供Qt程序的单元测试功能
    
        需要在pro文件中添加 QT + =testlib,需要添加头文件<QtTest>
    
    Qt Webkit
        基于WebKit2的实现以及一套全新的QML API

    (2)扩展模块
    
    ...

    二.QT5开发工具

     1.QTCreator

    2.VS

    ui_mainwindow.h和moc_mainwindow.cpp
    //ui_mainwindow.h
    
    #ifndef UI_MAINWINDOW_H
    #define UI_MAINWINDOW_H
    
    #include <QtCore/QVariant>
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMainWindow>
    #include <QtWidgets/QMenuBar>
    #include <QtWidgets/QStatusBar>
    #include <QtWidgets/QWidget>
    
    QT_BEGIN_NAMESPACE
    
    class Ui_MainWindow
    {
    pubic:
      QWidget* centralwidget;
      QMenuBar* menubar;
      QStatusBar* statusbar;
    
      void setupUi(QMainWindow* MainWindow)
      {
        if (MainWindow->objectName().isEmpty())
          MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        
        MainWindow->resize(800, 600);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        MainWindow->setCentralWidget(centralwidget);
        menubar = new QMenuBar(MainWindow)
        menubar->setObjectName(QString::fromUtf8("menubar"));
        MainWindow->setMenuBar(menubar);
        statusbar = new QStatusBar(MainWindow);
        statusbar->setObjectName(QString::fromUtf8("statusbar"));
        MainWindow->setStatusBar(statusbar);
    
        retranslateUi(MainWindow);
    
        QMetaObject::connectSlotsByName(MainWndow);
    
      } // setupUi
    
      void retranslateUi(QMainWindow* MainWindow)
      {
        MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
      }  //retranslateUi
    
    };
    
    namespae Ui {
      class MainWindow : public Ui_MainWindow {};
    }
    
    QT_END_NAMESPACE
    
    #endif //UI_MAINWINDOW_H
    //moc_mainwindow.cpp
    
    #include <memory>
    #include "../../test/mainwindow.h"
    #include <QtCore/qbytearray.h>
    #include <QtCore/qmetatype.h>
    
    #if !defined(Q_MOC_OUTPUT_REVISION)
    #error "The header file 'mainwindow.h' doesn't include <QObject>. "
    #elif Q_MOC_OUTPUT_REVISION != 67
    #error "This file was generated using the moc from 5.13.2. It"
    #error "cannot be used with the include files from this version of Qt."
    #error "(The moc has changed too mush.)"
    #endif
    
    QT_BEGIN_MOC_NAMESPACE
    QT_WARNING_PUSH
    QT_WARNING_DISABLE_DEPRECATED
    struct qt_meta_stringdata_MainWindow_t {
        QByteArrayData data[1]; 
        char stringdata0[11];
    };
    
    #define QT_MOC_LITERAL(idx, ofs, len) 
        Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs - idx * sizeof(QByteArrayData)))
    
    static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
        {
        QT_MOC_LIFERAL(0, 0, 10)  // "MainWindow"
        },
        "MainWindow"
    };
    #undef QT_MOC_LITERAL
    
    static const uint qt_meta_data_MainWindow[] = {
        //content:
        8,      //revision
        0,      //classname
        0,  0, //classinfo
        0,  0, //methods
        0,  0, //properties
        0,  0, //enums/sets
        0,  0, //constructors
        0,      //flags
        0,      //signalCount
        0       //eod
    };
    
    void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
    {
        Q_UNUSED(_o);
        Q_UNUSED(_id);
        Q_UNUSED(_c);
        Q_UNUSED(_a);
    }
    
    QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = {
      {
          &QMainWindow::staticMetaObject,
          qt_meta_stringdata_MainWindow.data,
          qt_meta_data_MainWindow,
          qt_static_metacall,
          nullptr,
          nullptr
      }
    
    };
    
    const QMetaObject* MainWindow::metaObject() const
    {
      return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
    
    }
    
    void* MainWindow::qt_metacast(const char* _clname)
    {
      if (!_clname) return nullptr;
      if (!_strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0) )
        return static_cast<void*>(this);
      return QMainWindow::qt_metacast(_clname);
    }
    
    int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void** _a)
    {
      _id = QMainWindow::qt_metacall(_c, _id, _a);
      return _id;
    }
    
    QT_WARNING_POP
    QT_END_MOC_NAMESPACE

    3.VSCode

    三.QT5数据类型

    1.字符串类型(QString) 

    //增加字符串
    
    (1) +
    
    QString str1 = "Welcome";
    str1 = str1 + "to you!";
     
    QString str2 = "Hello";
    str +="World";
    
    (2) QString::append()
    
    QString str1 = "Welcome";
    QString str2 = "to";
     
    str1.append(str2);
    str1.append("you!");
    
    (3) QString::sprintf()
    
    String str;
    str.sprintf("%s", "Welcome");
    str.sprintf("%s", "to you!");
    str.sprintf("%s %s", "Welcome", "to you!");
    
    (4) QString::arg()
    
    QString str;
    str = QString("%1 was born in %2").arg("John").arg(1982);
    //删除字符串
    
    。。。
    //更改字符串
    
    ...
    //查询字符串
    
    (1) QString::startsWith()
    
    / 判断一个字符串是否以某个字符串开头<br>QString str = "Welcome to you!"
    str.startsWith("Welcome", Qt::CaseSensitive);     //返回true
    str.startsWith("you", Qt::CaseSensitive);         //返回false
    
    (2) QString::endsWith()
    
    // 判断一个字符串是否以某个字符串结尾
    
    (3) QString::contains()
    
    // 判断一个指定的字符串是否出现过<br>QString str = "Welcome to you!";<br>str.contains("Welcome", Qt::CaseSensitive);  //返回true
    //字符串比较
    
    (1)  大于小于等于
    
    operator < (const QString&)  // 比较一个字符串是否小于另一个字符串,如果是返回true
    
    operator <= (const QString&)  // 比较一个字符串是否小于等于另一个字符串,如果是返回true
    
    operator == (const QString&)    // 比较两个字符串是否相等,如果相等返回true
    
    operator >= (const QString&)    // 比较一个字符串是否大于等于另一个字符串,如果是返回true 
    
    (2) localeAwareCompare()
    
    localeAwareCompare(const QString&, const QString&)  // 比较两个字符串,如果小于返回负整数值,如果相等返回0,如果大于返回正整数值
    
    (3) compare()
    
    compare(const QString&, const QString&, Qt::CaseSensitivity)  // 是否进行大小写比较,类似localeAeareCompare()
    //字符串转换
    
    QString::toInt()
    
    QString::toDouble()
    
    QString::toFloat()
    
    QString::toLong()
    
    QString::toLongLong()
    
     
    
    QString::toAscii()
    
    QString::toLatin1()
    
    QString::toUtf8()
    
    QString::toLocal8Bit()
    
    
    bool ok;
    QString valueStr = ui->lineEdit->text();
    int valueInt = valueStr.toInt(&ok);
    double area = valueInt * valueInt *PI;
    QString tempStr;
    ui->lineEdit->setText(tempStr.setNum(area));<br><br>QString str = "125";<br>bool ok;<br>int hex = str.toint(&ok, 16);<br>int dec = str.toInt(&ok, 10);
    //字符串判断
    
    QString().isNull();
    
    QString().isEmpty()
    //正则表达式
    
    使用正则表达式可以快速完成处理字符串的一些操作,如验证 查找 替换和分割
    
    Qt的QRegExp类是正则表达式的表示类,它基于Perl的正则表达式语言
    
    正则表达式由表达式(expressions) 量词(quantifiers)和断言(assertions)组成

    2.日期类型(QData)

    3.时间类型(QTime)

    4.顺序容器类型

    QT的顺序容器类型有QList QLinkedList QVector QStack QQueue
    //QVector<T>
    
    QVertor<T>在相邻的内存中存储数据类型T
    
    QVertor<T>既可以用下标访问,也可以使用迭代器访问
    //QList<T>
    
    QList<T>可以使用下标访问
    
    QList::append()
    
    QList::prepend()
    
    QList::insert()


    #include<QList>

    int main(int argc, char* argv)
    {
      QList<QString> list;
      {
        QString str("This is a test string"
    );
        list << str;
      }
    }
    //QLinkedList<T>
    
    QLinkedList<T>是一个链式列表,它以非连续的内存块保存数据
    
    QLinkedList<T>无法用下标访问,只能使用迭代器访问
    //QStack
    
    ...
    //QQueue
    
    ...

    5.关联容器类型

    Qt的关联容器类QMap QMultiMap QHash  QMultiHash  QSet
    //QMap
    
    QMap<QString, QString> map;
    map.insert("beijing", "111");
    map.insert("shanghai", "021");
    map.insert("nanjing", "025");
     
    QMapIterator<QString, QString> i(map);
    for (;i.hasNext();)
        qDebug() << " " << i.key() << " " << i.next().value();
    QMutableMapIterator<QString, QString> mi(map);
    if (mi.findNext("111"))
        mi.setValue("010");
    QMapIterator<QString, QString> modi(map);<br>qDebug() << " ";
    for (modi = map.constBegin(); modi != map.constEnd(); ++modi)
        qDebug() << " " << modi.key() << " " <<modi.next().value();
    //QSet
    
    ...
    //QHash
    
    ...
    //QMultiHash
    
    ...
    //QMultiMap
    
    ...
    //QVariant
    
    QVariant类能够保存很多QT类型的值,包括QColor QBrush QFont QPen QRect QSize等

     

     

    七.QT5绘制

    QT5绘制分为 2D绘制和3D绘制

     1.2D绘制

    QPainter QPaintDevice QPaintEngine三个类来绘制
    Qt默认窗口左上角为坐标原点(0,0),水平向右依次增大,水平向左依次减小
                  垂直向下依次增大,垂直向上依次减小
    
    QPainter执行绘图操作
    QPaintDevice提供绘图设备
    QPaintEngine提供接口,可以在不同的设备上绘制
    //mainwindow.h
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    //提供绘图类
    #include <QPainter>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    protected:
        void paintEvent(QPaintEvent* );
    
    private:
        Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H
    //mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::paintEvent(QPaintEvent* )
    {
        QPainter painter(this);
    
      //直接绘制
       //painter.drawLine(QPointF(0, 0), QPointF(100, 100));
    
      //添加画笔和画刷,改变形状和颜色
      QPen pen;                   //画笔
      pen.setColor(QColor(255, 0, 0));
      QBrush brush(QCOlor(0, 255, 0, 125));  //画刷
      painter.setPen(pen);            //添加画笔
      painter.setBrush(brush);          //添加画刷
      painter.drawRect(50, 50, 200, 100);   //绘制矩形  
    }

    2.3D绘制

    十.QT5文件

    十一.QT5算法

    QT的<QtAlgorithms>和<QtGlobal>模块提供了几种常用算法
    
    qAbs(<T>);
    
    qMax(<T>, <T>);
    
    qRound(<T>);
    
    qSwap(<T>, <T>);
    
    QObject::tr(QString);

    十二.QT5异常调试

    1.QDebug()

    //QDebug()能够将调试信息直接输出到控制台
    
    #include <QDebug>
     
    int main(int argc, char* argv[])
    {
        int x =10;
        int w = 10;
     
        // 字符串的形式输出
        qDebug("%d", x);
     
        // IO流的形式输出
        qDebug() << x << w << endl;
    }

    十三.QT5资源配置

    1.加载图片

    1.右键项目->Add New->选择 Qt Resource File->输入名称,例如X
    
    2.打开 X.qrc 资源文件,点击 添加前缀,可以修改前缀
    
    3.点击添加文件,把图片路径放进去
    
    4.对于 X.qrc资源文件 可以 Open in Editor,也可以 Open With 编辑器
    
    .qrc 资源文件实际上是XML文件

     

  • 相关阅读:
    ListComparer
    C#.net中类与结构的区别
    对C# 中堆栈,堆,值类型,引用类型的理解
    一道面试题
    Mvc不等于三层架构
    SQL养成一个好习惯是一笔财富
    清除MSSQL事务日志文件
    面向对象设计(OOD)五大基本原则
    .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解之一
    IIS7 Login failed for user IIS APPPOOL\ASP.NET v4.0
  • 原文地址:https://www.cnblogs.com/k5bg/p/15587414.html
Copyright © 2011-2022 走看看