QT常用库、类、函数等 | 您所在的位置:网站首页 › 怎么下载api函数库 › 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加密QDesktopWidgetQTimerQRubberBand橡皮筋类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()**使它可见。 一般不直接使用,通过子类继承来使用其函数功能。 容器控件QStackedWidgethttps://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进行网络编程时用的与网络相关的类) QTcpSocketQUdpSocketQHttpQFtp QtSql:包含数据库编程相关类 QSqlQueryQSqlDatabase 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 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,也就是哪个按钮都不选中。critical warning question about 不用写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. 常用函数 输出 sprintfarg 判断对象类型 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() if(item->inherits("QLineEdit")){ qDebug() 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(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共享内存,同一首地址 |
CopyRight 2018-2019 实验室设备网 版权所有 |