• QT的补充知识


    一、文件 QFile

    QT提供了QFile类用于对文件进行读写操作,也提供了其他的两个类:文本流(QTextSream)和数据流(QDataStream)

    • 文本流(QTextSream):用于对文本数据的处理,并且是以字为单位进行读/写
    • 数据流(QDataStream):用于对二进制数据的处理,并且是以字节为单位进行读/写

    QFlie类:

    1、对文件进行操作流程:
    如何找到文件?--------使用文件对话框(QFileDialog),也可以直接使用QFile类去找到文件
    2、打开文件

    bool open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
    参数:FILE*fh文件指针
    参数:QIODevice::OpenMode mode  //打开文件模式
    参数:QFileDevice::FileHandleFlags handleFlags = DontCloseHandle //文件处理标志
    ---------------------------------------------------------------
    bool open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
    参数:int fd :文件ID
    参数:QIODevice::OpenMode mode  //打开文件模式
    参数:QFileDevice::FileHandleFlags handleFlags = DontCloseHandle //文件处理标志
    ---------------------------------------------------------------
    virtual bool open(QIODevice::OpenMode mode) override
    参数:QIODevice::OpenMode mode  //打开文件模式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3、读/写

    • 读取:
    virtual qint64 readData(char *data, qint64 len) override
    返回值:qint64=long long int
    参数:char *data里读取数据
    参数:qint64  读取数据的长度
    -----------------------------
    //按行读取
    virtual qint64 readLineData(char *data, qint64 maxlen) override
    返回值:qint64=long long int
    参数:char *data里读取数据
    参数:qint64  读取数据的最大长度
    -----------------------------
    QByteArray read(qint64 maxSize)
    返回值:QByteArray:字节数组  //文本数据、网络相关的数据等等
    参数:qint64 maxSize;最大能读取数据长度
    -----------------------------
    //读取文件里的所有数据
    QByteArray readAll()
    返回值:QByteArray:字节数组  //文本数据、网络相关的数据等等
    -----------------------------
    //按行读取
    QByteArray readLine(qint64 maxSize = 0)
    返回值:QByteArray:字节数组  //文本数据、网络相关的数据等等
    参数:qint64 maxSize = 0  //读取一行数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 写:
    virtual qint64 writeData(const char *data, qint64 len) override
    返回值:qint64,返回写入的字节个数
    参数const char *data:待写入的字符串
    参数qint64 len:待写入的字符串的长度
    -----------------------------
    qint64 write(const char *data, qint64 maxSize)
    返回值:qint64,返回写入的字节个数
    参数const char *data:待写入的字符串
    参数qint64 len:待写入的字符串最大的长度
    -----------------------------
    qint64 write(const char *data)
    返回值:qint64,返回写入的字节个数
    参数const char *data:待写入的字符串
    -----------------------------
    qint64 write(const QByteArray &byteArray)
    返回值:qint64,返回写入的字节个数
    参数const QByteArray &byteArray:待写入的字节数组
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4、关闭文件

    virtual void close() override
    
    • 1

    QFileInfo类:

    用于查看文件的基本信息的类

    QDir absoluteDir() const  //获取文件的绝对目录
    QString absoluteFilePath() const  //获取文件的绝对路径(包含文件)
    QString absolutePath() const   //获取文件的绝对路径(不包含文件)
    QString baseName() const  //  获取文件名称(不包含后缀)
    QDateTime birthTime() const   //获取文件的创建时间
    QString completeSuffix() const  //获取文件的后缀
    QDir dir() const          //获取文件的目录
    bool exists() const   //判断文件是否存在,true:存在  false:不存在
    QString fileName() const //获取文件名(包好后缀)
    QString filePath() const //获取文件的相对路径
    QDateTime fileTime(QFile::FileTime time) const  //返回文件被修改的时间
    bool isHidden() const  //判断文件是否被隐藏 true:隐藏  false:不隐藏
    bool isReadable() const  //判断文件是否是只读   ture:只读  false:不只读
    bool permission(QFile::Permissions permissions) const  //设置文件的许可证(权限)true:设置成功  false:设置失败
    QDateTime lastRead() const  //获取最后一次读取文件的时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    QDir类:

    用于管理目录

    QString absoluteFilePath(const QString &fileName) const  //获取文件的路径
    QString absolutePath() const  
    QString canonicalPath() const
    bool cd(const QString &dirName)  //切换文件路径
    bool cdUp()  //切换到上一个路径:cd ../
    bool mkdir(const QString &dirName) const  //创建目录或文件
    bool mkpath(const QString &dirPath) const  //创建路径
    bool rename(const QString &oldName, const QString &newName) //更新文件名称
    bool rmdir(const QString &dirName) const   //移除目录,注意:目录或路径下所有文件都删掉(慎用)
    bool rmpath(const QString &dirPath) const  //移除路径
    QDir current()
    QString currentPath()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    二、事件及图形

    • 事件类型:键盘事件、鼠标事件、定时器事件、图形事件等等
    • 事件:事件的产生--------事件经过----------事件的结果,QT里提供了事件

    QT事件的处理流程:

    • 事件的产生:
      • 有用户实现或者QT内部实现
      • 用户实现:键盘按下、释放,鼠标按下、释放等等
      • QT内部实现:定时器事件,图形事件等等
    • 事件的经过:
      • 事件的监听和派送
      • 事件的监听:应用程序(QApplication)调用.exec()监听产生的事件(事件循环系统)
      • 事件的派送:当应用程序(QApplication)监听到事件之后,就将该事件派送出去,派送给QEvent类。QEvent类收到QApplication派送的事件之后,就将事件分发给具体的事件处理对象
    • 事件的处理:
      • 收到QEvent类分发的事件,当前对象(基本的控件)接收该事件并进行处理
      • 事件处理函数(对事件进行处理):
        • mousePressEvent(QMouseEvent *event);//鼠标按下事件进行处理
        • mouseReleaseEvent(QMouseEvent *event);//鼠标释放事件进行处理
        • mouseMoveEvent(QMouseEvent *event) ;//鼠标移动事件进行处理

    1、QT里提供的事件:

    virtual void actionEvent(QActionEvent *event)  //当窗口状态行为被改变时,会执行该事件
    virtual void changeEvent(QEvent *event)
    virtual void closeEvent(QCloseEvent *event)  //当窗口被关闭时会执行该事件,
    virtual void contextMenuEvent(QContextMenuEvent *event)
    void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)
    void destroy(bool destroyWindow = true, bool destroySubWindows = true)
    virtual void dragEnterEvent(QDragEnterEvent *event)
    virtual void dragLeaveEvent(QDragLeaveEvent *event)
    virtual void dragMoveEvent(QDragMoveEvent *event)
    virtual void dropEvent(QDropEvent *event)
    virtual void enterEvent(QEvent *event)
    virtual void focusInEvent(QFocusEvent *event)
    bool focusNextChild()
    virtual bool focusNextPrevChild(bool next)
    virtual void focusOutEvent(QFocusEvent *event)
    bool focusPreviousChild()
    virtual void hideEvent(QHideEvent *event)  //当窗口被隐藏时会执行该事件
    virtual void inputMethodEvent(QInputMethodEvent *event)
    virtual void keyPressEvent(QKeyEvent *event)  //当键盘按下的时候,会执行该事件
    virtual void keyReleaseEvent(QKeyEvent *event)  //当键盘释放的时候,会执行该事件
    virtual void leaveEvent(QEvent *event)
    virtual void mouseDoubleClickEvent(QMouseEvent *event)
    virtual void mouseMoveEvent(QMouseEvent *event)
    virtual void mousePressEvent(QMouseEvent *event)
    virtual void mouseReleaseEvent(QMouseEvent *event)
    virtual void moveEvent(QMoveEvent *event)
    virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result)
    virtual void paintEvent(QPaintEvent *event)
    virtual void resizeEvent(QResizeEvent *event)
    virtual void showEvent(QShowEvent *event)
    virtual void tabletEvent(QTabletEvent *event)
    virtual void wheelEvent(QWheelEvent *event)
    
    • 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

    2、事件过滤器:eventFilter

    bool QObject::eventFilter(QObject *watched, QEvent *event)  //	QObject类中的时间过滤器
    返回值:bool类型    当事件过滤成功,则返回true, 否则,返回false
    参数1:QObject *watched       子窗口部件对象
    参数2:QEvent *event       在子窗口部件对象上产生的事件的类型
    -------------------------------------------------------------------
    //使用:首先需要向指定的子窗口部件注册事件过滤器,之后即可使用事件过滤器
    //注册事件过滤器:	
    void installEventFilter(QObject *filterObj)  //注册事件过滤器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、事件分发器:event

    事件分发器原型:
    	bool QObject::event(QEvent *e)  //事件分发器
    	返回值:bool   分发事件的返回值
    	参数:QEvent *e  //分发事件的类型
    
    • 1
    • 2
    • 3
    • 4

    4、定时器

    QT里定时器的实现两种方式:
    	(1)实例化QTimer类
    	(2)重写定时器事件
    		 void QObject::timerEvent(QTimerEvent *event)  //定时器事件
    
    • 1
    • 2
    • 3
    • 4

    (1)实例化QTimer类

    void start(std::chrono::milliseconds msec)  //开启定时器
    void start(int msec)  //开启定时器并设置定时时间,单位:毫秒
    void start()   //开启定时器
    void stop()   //停止定时器
    ---------------------------------------------------------
    信号:
    void timeout()   //当定时器开启之后,到达设置的时间,触发该信号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (2)重写定时器事件

     void QObject::timerEvent(QTimerEvent *event)  //定时器事件
     int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)  //开启定时器
    int startTimer(std::chrono::milliseconds time, Qt::TimerType timerType = Qt::CoarseTimer) //开启定时器
    返回值:int    返回定时器的ID号
    
    • 1
    • 2
    • 3
    • 4

    5、绘画(绘图)事件

    virtual void paintEvent(QPaintEvent *event)  //绘画事件
    
    • 1

    当应用程序界面刷新一次,就会自动调用paintEvent事件处理函数
    调用update()函数,也可以实现调用paintEvent事件处理函数

    QPainter类:
    一支不带彩色的画笔,默认的颜色为黑色

    void drawArc(const QRectF &rectangle, int startAngle, int spanAngle)
    void drawArc(const QRect &rectangle, int startAngle, int spanAngle)
    void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
    void drawChord(const QRectF &rectangle, int startAngle, int spanAngle)
    void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
    void drawChord(const QRect &rectangle, int startAngle, int spanAngle)
    void drawConvexPolygon(const QPointF *points, int pointCount)
    void drawConvexPolygon(const QPolygonF &polygon)
    void drawConvexPolygon(const QPoint *points, int pointCount)
    void drawConvexPolygon(const QPolygon &polygon)
    void drawEllipse(const QRectF &rectangle)
    void drawEllipse(const QRect &rectangle)
    void drawEllipse(int x, int y, int width, int height)
    void drawEllipse(const QPointF &center, qreal rx, qreal ry)
    void drawEllipse(const QPoint &center, int rx, int ry)
    void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphs)
    void drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
    void drawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
    void drawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = ...)
    void drawImage(const QPoint &point, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = ...)
    void drawImage(const QRectF &rectangle, const QImage &image)
    void drawImage(const QRect &rectangle, const QImage &image)
    void drawImage(const QPointF &point, const QImage &image)
    void drawImage(const QPoint &point, const QImage &image)
    void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)
    void drawLine(const QLineF &line)
    void drawLine(const QLine &line)
    void drawLine(int x1, int y1, int x2, int y2)
    void drawLine(const QPoint &p1, const QPoint &p2)
    void drawLine(const QPointF &p1, const QPointF &p2)
    void drawLines(const QLineF *lines, int lineCount)
    void drawLines(const QVector<QLineF> &lines)
    void drawLines(const QPointF *pointPairs, int lineCount)
    void drawLines(const QVector<QPointF> &pointPairs)
    void drawLines(const QLine *lines, int lineCount)
    void drawLines(const QVector<QLine> &lines)
    void drawLines(const QPoint *pointPairs, int lineCount)
    void drawLines(const QVector<QPoint> &pointPairs)
    void drawPath(const QPainterPath &path)
    void drawPicture(const QPointF &point, const QPicture &picture)
    void drawPicture(int x, int y, const QPicture &picture)
    void drawPicture(const QPoint &point, const QPicture &picture)
    void drawPie(const QRectF &rectangle, int startAngle, int spanAngle)
    void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
    void drawPie(const QRect &rectangle, int startAngle, int spanAngle)
    void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
    void drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)
    void drawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
    void drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
    void drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)
    void drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)
    void drawPixmap(const QPointF &point, const QPixmap &pixmap)
    void drawPixmap(const QPoint &point, const QPixmap &pixmap)
    void drawPixmap(int x, int y, const QPixmap &pixmap)
    void drawPixmap(const QRect &rectangle, const QPixmap &pixmap)
    void drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)
    void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = ...)
    void drawPoint(const QPointF &position)
    void drawPoint(const QPoint &position)
    void drawPoint(int x, int y)
    void drawPoints(const QPointF *points, int pointCount)
    void drawPoints(const QPolygonF &points)
    void drawPoints(const QPoint *points, int pointCount)
    void drawPoints(const QPolygon &points)
    void drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
    void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)
    void drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
    void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
    void drawPolyline(const QPointF *points, int pointCount)
    void drawPolyline(const QPolygonF &points)
    void drawPolyline(const QPoint *points, int pointCount)
    void drawPolyline(const QPolygon &points)
    void drawRect(const QRectF &rectangle)
    void drawRect(int x, int y, int width, int height)
    void drawRect(const QRect &rectangle)
    void drawRects(const QRectF *rectangles, int rectCount)
    void drawRects(const QVector<QRectF> &rectangles)
    void drawRects(const QRect *rectangles, int rectCount)
    void drawRects(const QVector<QRect> &rectangles)
    void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
    void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = ...)
    void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = ...)
    void drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText)
    void drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)
    void drawStaticText(int left, int top, const QStaticText &staticText)
    void drawText(const QPointF &position, const QString &text)
    void drawText(const QPoint &position, const QString &text)
    void drawText(int x, int y, const QString &text)
    void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
    void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
    void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
    void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
    void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())
    void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)
    void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = ...)
    
    • 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
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    QPen类(画笔类):

    画笔类,可以设置画笔颜色、画笔宽度等等

    //1、可以设置画笔的颜色,线宽等信息
    QPen  pen;
    pen.setColor(QColor(255,0,0));//设置画笔的颜色
    //设置线宽
    pen.setWidth(6);
    //设置画笔的样式
    pen.setStyle(Qt::DotLine);
    p.setPen(pen);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    QBrush类(画刷类):

    //2、可以填充颜色等信息
    QBrush brush;//填充类
    //设置填充的颜色
    brush.setColor(QColor(255,0,0));
    //设置填充样式
    brush.setStyle(Qt::SolidPattern);
    p.setBrush(brush);
    p.drawRect(50,50,50,50);
    p.drawLine(50,50,80,80);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、多线程

    为什么QT引入多线程概念?QT搭建界面的工具,使用多线程可以解决界面卡顿,响应不及时的情况
    QT中新建的界面,实质上是一个主线程
    如何实现(搭建)线程:

    • (1)继承自QThread类:新建一个类继承自QThread类,启动新建类运行
    • (2)moveToThread方法:新建一个类将该类放到线程中运行
  • 相关阅读:
    利用dns协议发起ddos反射攻击
    【C刷题初阶】刷爆力扣第一弹
    Nacos
    创业的第125天——随记
    搭建GraphQL服务
    JS(一)
    [复现-ing|论文]YOLO-landmark detection
    洛谷 P3131 [USACO16JAN] Subsequences Summing to Sevens S
    Node.js学习笔记_No.03
    Linux常用命令——find命令大全
  • 原文地址:https://blog.csdn.net/qq_53402930/article/details/132675234