QT常用库、类、函数等

文章目录

  • 常用基类
    • QObject类
      • 内存管理机制:父子对象的内存管理机制
    • QApplication类:应用程序类(一般不直接操纵)
    • QWidget类:窗体类
      • 容器控件QStackedWidget
  • Qt常用库
    • QtCore基本库
    • QtGui GUI库:包含图形窗口类
    • 网络和数据库相关类
      • QtNetwork: Qt网络库(QT进行网络编程时用的与网络相关的类)
      • QtSql:包含数据库编程相关类
  • QLineEdit
    • 密码模式
  • QSpinBox
    • 子部件
  • Dialog->setWindowFlags() 标题栏控制
  • 基本对话框
    • 类型
  • 标准对话框之 QMessageBox
  • 文件操作
    • QFile
  • Qfont类: 字体
  • QColor类
  • QMetaObject类
    • QMetaObject::connectSlotsByName(QObject *object)
  • QSplashScreen:程序启动画面
  • AES加密
  • QDesktopWidget
  • QTimer
  • QRubberBand橡皮筋类
  • QRect
  • 常用函数
    • 输出
    • 判断对象类型
      • T qobject_cast(QObject *object)
      • bool QObject::inherits(const char *className) const
    • 类型转换
    • 循环
      • foreach
    • 取Object对象的列表:children & findChildren
      • 将输入框设为不可编辑
    • 去除标题栏
    • 窗体背景色透明
    • 设置透明度
    • 获取窗体大小、鼠标位置
  • QWidget操作
    • 去除标题栏
    • 设置背景颜色
  • 布局
    • 滚动条布局
    • 清空layout
      • 仅删除layout中的widget
    • 同一个layout中两个widget互斥显示
  • QTableWidget
    • 添加一列选项框(QCheckBox)
  • qobject_cast
  • 技巧
    • BYTE 转 float :使用union联合体(避免多与强制转换,节约内存)

https://doc.qt.io/qt-5/classes.html#t

常用基类

QObject类

  • Qt对象模型的核心
  • Qt中几乎所有类、所有部件widget的基类
  • 提供了信号-槽的通信机制
  • 提供了事件处理机制
  • 实现了内存管理的功能

内存管理机制:父子对象的内存管理机制

  • 每个对象都有一个指向父对象指针
  • 由父对象来负责子对象的内存管理(内存回收)
    • 需要为每一个子对象指定父对象
  • 当一个父对象被删除,它的子对象也同样被删除

QApplication类:应用程序类(一般不直接操纵)

  • 主要功能:负责GUI应用的流程控制和主要的设置;
    • 负责处理事件循环
    • 处理应用程序的开始、结束
    • 系统和应用程序方面的总设置,如设置编码方式等。
  • QApplication对象只能有一个,而且必须在其他对象之前创建
  • 应用程序中通过全局指针qApp访问QApplication对象
  • 退出:
    • quit():返回0表示成功
    • exit(0)

QWidget类:窗体类

  • 所有用户界面对象的基类,是QObject类的子类。

  • 通常作为GUI。

  • 接收、处理 鼠标、键盘等其它事件

  • 作为一个容器可以包含其他窗体对象(窗口部件、图形界面组件)。

    • 在屏幕上绘制按钮Button、菜单menu、滚动条scroll bars、框架frame 等窗口部件。
    • 还可包含 菜单栏QMenuBar、工具栏QToolBar、状态栏QStatusBar等。
  • 当窗口部件被创建的时候,总是隐藏的,必须调用**show()**使它可见。

  • 一般不直接使用,通过子类继承来使用其函数功能。

容器控件QStackedWidget

https://blog.csdn.net/YinShiJiaW/article/details/105016253

  • 提供了一个控件栈,在这个栈中,一次只能显示一个控件
  • 页面的切换通常是通过QComboBox或者QListWidget来触发。
// 页面控件的添加与删除
stackedWidget->addWidget(groupBox_0);//添加
stackedWidget->insertWidget(1, groupBox_0);//插入
stackedWidget->removeWidget(groupBox_0);//删除

// 当前控件的索引
int index = stackedWidget->currentIndex();

Qt常用库

  • Qt中的根据功能划分在不同的

QtCore基本库

  • 基本数据类型:QString(不直接使用c++ 中String)、QByteArray(字节数组)
  • 基本数据结构:QList、QVector、QMap
  • 输入输出类:QTextStream(文本流)、QFile(文件类)
  • 多线程编程用到的类:QThread(多线程)、QWaitCondition(条件等待)

QtGui GUI库:包含图形窗口类

  • 窗口部件类:QWidget、QLabel、QPushButton
  • 布局类:QVBoxLayout、QHBoxLayout、QGridLayout
  • 主窗口类:QMainWindow、QMenu
  • 绘图类:QPainter、QPen、QBrush
  • 基本对话框类:QFileDialog、QprintDialog

网络和数据库相关类

QtNetwork: Qt网络库(QT进行网络编程时用的与网络相关的类)

  • QTcpSocket
  • QUdpSocket
  • QHttp
  • QFtp

QtSql:包含数据库编程相关类

  • QSqlQuery
  • QSqlDatabase

QLineEdit

密码模式

lineEdit->setEchoModeQLineEdit::Normal) 正常显示输入的字符,默认选项。
QLineEdit::NoEcho 不显示任何输入,常用于密码类型,包括密码长度
QLineEdit::Password 显示平台相关的密码掩码字符,而不是实际的字符输入。
QLineEdit::PasswordEchoOnEdit 处于输入状态的时候,是正常显示字符。 输入完毕之后,使用Password形式隐藏字符

QSpinBox

子部件

::down-arrow combo box或spin box的下拉箭头
::down-button spin box的向下按钮
::drop-down combo box的下拉箭头
::indicator checkbox、radio button或可选择group box的指示器
::item menu、menu bar或status bar的子项目
::menu-indicator push button的菜单指示器
::title group box的标题
::up-arrow spin box的向上箭头
::up-button spin box的向上按钮设计样式表

Dialog->setWindowFlags() 标题栏控制

// 去除标题栏
Dialog->setWindowFlags(Qt::FramelessWindowHint);

// 解决不显示问题
Dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);

Qt::WindowMinMaxButtonsHint: //显示最小化按钮和最大化按钮
Qt::WindowCloseButtonHint:   //显示关闭按钮

基本对话框

类型

  • 用户自己定义的窗体
  • 系统定义好的窗体

标准对话框之 QMessageBox

  1. information
static StandardButton QMessageBox::information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

// 第四个参数 buttons,声明对话框放置的按钮,默认是只放置一个 OK 按钮,这个参数可以使用或运算,例如我们希望有一个 Yes 和一个 No 的按钮,可以使用 QMessageBox::Yes | QMessageBox::No,所有的按钮类型可以在 QMessageBox 声明的 StandarButton 枚举中找到;
// 第五个参数 defaultButton 就是默认选中的按钮,默认值是 NoButton,也就是哪个按钮都不选中。

QT常用库、类、函数等_第1张图片

  1. critical
    QT常用库、类、函数等_第2张图片

  2. warning
    QT常用库、类、函数等_第3张图片

  3. question
    QT常用库、类、函数等_第4张图片

  4. about
    QT常用库、类、函数等_第5张图片

文件操作

QFile

bool QFile::copy(const QString &fileName, const QString &newName)  // If a file with the name newName already exists, copy() returns false

bool QFile::exists(const QString &fileName)  // 不支持有中文或者空格

QFile::exists(QString().toLocal8Bit());  // .toUtf8()

Qfont类: 字体

常用函数 作用
font.setPointSize(int) 大小
font.setFamily(“楷体”) 款式
font.setItalic(true) 斜体
font.setStyle(QFont::StyleItalic) 斜体
font.setOverline(true) 上划线
font.setUnderline(true) 下划线
font.setStrikeOut(true) 删除线
setBold(bool) 黑体
setKerning(bool) 字距调整

QColor类

  • QColor构造函数基于RGB值创建颜色。
  • 要基于HSV或CMYK值创建QColor,分别使用toHsv()和toCmyk()函数。

QMetaObject类

QMetaObject::connectSlotsByName(QObject *object)

  • 不用写connect函数来连接信号和槽

  • 递归搜索给定对象的所有子对象,并将来自这些子对象的匹配信号连接到对象插槽。

  • 槽函数名规则:void on__();

    QSplashScreen:程序启动画面

    QSplashScreen splash(QPixmap("://Resource/images/xxx.png")); // 初始化图片到QSplashScreen
    splash.show(); // 显示图片
    a.processEvents(); // 刷新事件循环
    
    splash.finish(&widget);
    

    AES加密

    AES库

    QDesktopWidget

    QRect deskRect = desktopWidget->availableGeometry();
    double availableScreenX = deskRect.width();
    double availableScreenY = deskRect.height();
    QDesktopWidget* desktop = QApplication::desktop();
    
    dlglogin.setGeometry(desktop->screenGeometry(0));  // 哪个屏幕
    dlglogin.resize(availableScreenX/3, availableScreenY/2);  // 窗口大小
    dlglogin.move((availableScreenX - availableScreenX/3) / 2, (availableScreenY - availableScreenY/2) / 2);  // 窗口位置:居中
    

    QTimer

    恒定的时间间隔会发射timeout()信号

    QRubberBand橡皮筋类

    绘制一个类似蚂蚁线的选区,并且选区线能够跟随鼠标的移动而伸缩

    QRect

    • void QRect::getCoords(int *x1, int *y1, int *x2, int *y2) const : Extracts the position of the rectangle’s top-left corner to *x1 and *y1, and the position of the bottom-right corner to *x2 and *y2.

    常用函数

    输出

    • sprintf
    • arg

    判断对象类型

    T qobject_cast(QObject *object)

    • 如果给定的object是T类型或者T的子类,那么该方法把object转换成T类型,否则返回0,空对象也返回0.

    bool QObject::inherits(const char *className) const

    • 判断

    类型转换

    • QString.toLocal8Bit() 将QString以自己正确的编码方式读取并转换成编译器编码方式的字节流

    循环

    foreach

    foreach (str, list)
        qDebug() << str;
    

    取Object对象的列表:children & findChildren

    // 1
    QList<QLineEdit *> lineEdit=ui.groupBox->findChildren<QLineEdit *>();
    for(auto item: lineEdit){
        qDebug()<<item->text()<<endl;
    }
    
    // 2
    for(auto item:ui.groupBox->children())
    {
        if(item->inherits("QLineEdit")){
            qDebug()<<item->objectName()<<endl;
        }
    }
    

    将输入框设为不可编辑

    QList<QLineEdit *> lineEdit=ui.groupBox->findChildren<QLineEdit *>();
    for(auto item: lineEdit){
        if("" != item->text()){
            item->setEnabled(false);
        }
    }
    

    去除标题栏

    this->setWindowFlags(Qt::FramelessWindowHint);
    

    窗体背景色透明

    weiget->setAttribute(Qt::WA_TranslucentBackground, true);
    

    https://www.cnblogs.com/Dennis-mi/articles/5307193.html

    设置透明度

    setWindowOpacity(0.5);
    

    或使用QGraphicsOpacityEffect

    获取窗体大小、鼠标位置

    • rect() 的x()、y()始终从(0,0)起,宽高客户区宽高。
    • geometry() 相对于父窗体的rect区域,当窗体是主窗体时,即是屏幕上的位置,客户区。
    • frameGeometry() 相对于父窗体的rect区域,当窗体是主窗体时,即是屏幕上的位置,客户区 + 标题栏。
    • event->pos() 鼠标相对于窗体的位置。
    • event->globalPos() 鼠标在全局范围的位置。
    • global(event->pos()) 鼠标在全局范围的位置。

    QWidget操作

    去除标题栏

    setWindowFlags(Qt::Dialog | Qt::WindowMinimizeButtonHint);
    
    setWindowFlags(Qt::FramelessWindowHint);
    
    Qt::FrameWindowHint:         //没有边框的窗口
    Qt::WindowStaysOnTopHint:    //总在最上面的窗口
    Qt::CustomizeWindowHint:     //自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
    Qt::WindowTitleHint:                  //显示窗口标题栏
    Qt::WindowSystemMenuHint:    //显示系统菜单
    Qt::WindowMinimizeButtonHint://显示最小化按钮
    Qt::WindowMaximizeButtonHint://显示最大化按钮
    Qt::WindowMinMaxButtonsHint: //显示最小化按钮和最大化按钮
    Qt::WindowCloseButtonHint:   //显示关闭按钮 
    

    设置背景颜色

    this->setAttribute(Qt::WA_StyledBackground,true);
    this->setStyleSheet("background-color: rgba(255,255, 255, 0)");
    

    布局

    滚动条布局

    QGridLayout *gridLayout = new QGridLayout(this);
    gridLayout->setContentsMargins(9, 9, 9, 9);
    QScrollArea *scrollarea = new QScrollArea(this);
    scrollarea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    scrollarea->setWidgetResizable(true);
    
    QWidget *scrollareawidgetcontents = new QWidget();  // 先把东西都放进去,再一起放入scrollarea
    m_gridScrollArea = new QGridLayout(scrollareawidgetcontents);
    m_gridScrollArea->setContentsMargins(0, 0, 0, 0);
    
    // widget1
    m_widget1 = new QWidget();
    m_grid1 = new QGridLayout(m_widget1);
    m_grid1->setContentsMargins(1, 1, 1, 1);
    m_grid1->setSpacing(9);
    
    m_gridScrollArea->addWidget(m_widget1, 0, 0);
    // 添加伸缩条
    QSpacerItem *verticalspacer = new QSpacerItem(20, 300, QSizePolicy::Minimum, QSizePolicy::Expanding);
    QSpacerItem *horizontalspacer = new QSpacerItem(20, 300, QSizePolicy::Expanding, QSizePolicy::Minimum);
    m_gridScrollArea->addItem(verticalspacer, 1, 0);
    m_gridScrollArea->addItem(horizontalspacer, 0, 1);
    
    scrollarea->setWidget(scrollareawidgetcontents);
    gridLayout->addWidget(scrollarea, 0, 0, 1, 1);
    

    清空layout

    // 清除layout
    void DSnapshotCmd::clearLayout(QLayout *layout)
    {
        QLayoutItem *item;
        while((item = layout->takeAt(0)) != 0){
            //删除widget
            if(item->widget()){
                delete item->widget();
                //item->widget()->deleteLater();
            }
            //删除子布局
            QLayout *childLayout = item->layout();
            if(childLayout){
                clearLayout(childLayout);
            }
            delete item;
        }
    }
    

    仅删除layout中的widget

    QLayoutItem *child;
    while ((child = ui.gridLayout_report->takeAt(0)) != 0)
    {
    	ui.gridLayout_report->removeWidget(child->widget());
    	child->widget()->setParent(0);
    	delete child;
    }
    
    

    同一个layout中两个widget互斥显示

    // 提前准备好widget1, widget2
    m_grid->removeWidget(m_widget1);  // 不会销毁widget1,后续可继续addwidget加回来
    m_grid->addWidget(m_widget2, 0, 0);
    m_widget1->setVisible(false);  // removeWidget()后仍然显示,需要手动设为不可见
    m_widget2->setVisible(true);
    

    https://blog.csdn.net/calmreason/article/details/89632990

    QTableWidget

    添加一列选项框(QCheckBox)

    table->insertRow(i);
    QTableWidgetItem *item = new QTableWidgetItem();
    item->setCheckState(Qt::Unchecked);
    table->setItem(i, 0, item);
    

    qobject_cast

    在对Event处理中,可以通过obj及类型对事件进行处理

    bool eventFilter(QObject *obj, QEvent *event)
    {
        if(qobject_cast<ImagePreviewWidget*>(obj) == m_pImageSnap[0] && event->type() == QEvent::MouseButtonRelease)
    	{
    	}
    }
    

    技巧

    BYTE 转 float :使用union联合体(避免多与强制转换,节约内存)

    union UnionData
    {
        float fdata;
        BYTE Bytedata[4];
    }UnionIndex;
    BYTE m_Reserve[1599];
    ......
    memcpy(UnionIndex.Bytedata, m_Reserve,4);
    item.m_fValue = UnionIndex.m_fdata;  // 与Bytedata共享内存,同一首地址
    

    你可能感兴趣的:(C++\QT,QT)