文章目录
- 常用基类
- QObject类
-
- QApplication类:应用程序类(一般不直接操纵)
- QWidget类:窗体类
-
- Qt常用库
- QtCore基本库
- QtGui GUI库:包含图形窗口类
- 网络和数据库相关类
- QtNetwork: Qt网络库(QT进行网络编程时用的与网络相关的类)
- QtSql:包含数据库编程相关类
- QLineEdit
-
- QSpinBox
-
- Dialog->setWindowFlags() 标题栏控制
- 基本对话框
-
- 标准对话框之 QMessageBox
- 文件操作
-
- 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
- 类型转换
- 循环
-
- 取Object对象的列表:children & findChildren
-
- 去除标题栏
- 窗体背景色透明
- 设置透明度
- 获取窗体大小、鼠标位置
- QWidget操作
-
- 布局
- 滚动条布局
- 清空layout
-
- 同一个layout中两个widget互斥显示
- QTableWidget
-
- qobject_cast
- 技巧
- BYTE 转 float :使用union联合体(避免多与强制转换,节约内存)
https://doc.qt.io/qt-5/classes.html#t
常用基类
QObject类
- Qt对象模型的核心
- Qt中几乎所有类、所有部件widget的基类
- 提供了信号-槽的通信机制
- 提供了事件处理机制
- 实现了内存管理的功能
内存管理机制:父子对象的内存管理机制
- 每个对象都有一个指向父对象指针
- 由父对象来负责子对象的内存管理(内存回收)
- 当一个父对象被删除,它的子对象也同样被删除
QApplication类:应用程序类(一般不直接操纵)
- 主要功能:负责GUI应用的流程控制和主要的设置;
- 负责处理事件循环
- 处理应用程序的开始、结束
- 系统和应用程序方面的总设置,如设置编码方式等。
- QApplication对象只能有一个,而且必须在其他对象之前创建
- 应用程序中通过全局指针qApp访问QApplication对象
- 退出:
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常用库
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:包含数据库编程相关类
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 );
-
critical
-
warning
-
question
-
about
文件操作
QFile
bool QFile::copy(const QString &fileName, const QString &newName)
bool QFile::exists(const QString &fileName)
QFile::exists(QString().toLocal8Bit());
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)
QSplashScreen:程序启动画面
QSplashScreen splash(QPixmap("://Resource/images/xxx.png"));
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.
常用函数
输出
判断对象类型
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
QList<QLineEdit *> lineEdit=ui.groupBox->findChildren<QLineEdit *>();
for(auto item: lineEdit){
qDebug()<<item->text()<<endl;
}
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();
m_gridScrollArea = new QGridLayout(scrollareawidgetcontents);
m_gridScrollArea->setContentsMargins(0, 0, 0, 0);
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
void DSnapshotCmd::clearLayout(QLayout *layout)
{
QLayoutItem *item;
while((item = layout->takeAt(0)) != 0){
if(item->widget()){
delete item->widget();
}
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互斥显示
m_grid->removeWidget(m_widget1);
m_grid->addWidget(m_widget2, 0, 0);
m_widget1->setVisible(false);
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)