Qt的基础知识

一、ui的类与cpp的类

  1. 创建一个初始工程,cpp里边有一个类MainWindow,ui文件也有MainWindow类
  2. 在cpp里将ui里的类MainWindow放入命名空间UI中,并在cpp的MainWindow类里定义一个成员变量UI::MainWindow指针
  3. cpp的MainWindow的构造函数中,使用初始化列表构造一个UI::MainWindow成员,并使用ui->setupUi(this)绑定两个MainWindow

二、三个窗口类

  1. QWidget,可以不指定父对象单独个体也可以指定父对象实现内嵌,作为独立个体需要show方法显示
  2. QDialog,只能实现为单独个体(即使指定父对象),非模态显示show方法,模态显示exec方法(会卡住)
  3. QMainWindow,只能实现为独立个体,包含菜单栏、工具栏(可多个)、状态栏

三、内存回收机制

  1. 构造时指定的QParent成员,会形成一个对象树,或使用QObject提供的方法setParent指定成员
  2. 对象树中的成员删除时,将其从parent的children中移除,并对其所有的children删除

四、将qDebug()打印到终端

  1. pro文件加CONFIG += console

五、QByteArray和QString

  1. QByteArray的类型转换,data方法,QByteArray转char*;setNum方法,int/long/char类型转QByteArray;toxx,QByteArray转xx类型
  2. QString的类型转换,fromStdString方法,c++标准string到QString;toStdString方法,QString转为std::string;toUtf8方法,QStirng转QByteArray;构造方法,QByteArray转QStirng;toUpper转大写,toLower转小写

六、QVariant类

  1. 自定义一个结构体,使用Q_DECLARE_METATYPE(Type)实现一个默认构造函数和拷贝构造函数
  2. 实例化结构体,使用fromValue转化为QVariant类型,使用QVariant的canConvert()判断能否转换为T类型,使用value()转换为T类型
  3. T类型可以是自定义类型,也可以是QVariant构造函数中可以转化的类型

七、位置尺寸类

  1. QPoint,有得到值x,y,有得到引用rx,ry,运算符重载
  2. QLine,两点得一线
  3. QSize,描述大小,有scale,成员长、宽
  4. QRect,描述矩形,点和大小

八、时间日期类

  1. QDate、QTime、QDateTime
  2. QDateTime now = QDateTime::currentDateTime(); now.toString("yyyy-MM-dd hh:mm:ss")

九、信号和槽

  1. connect(QObject* send, PointerToMemberFuncion signal, QObject* recv, PointerToMemberFuncion slot)
  2. 标准控件有相应的信号和槽处理函数
  3. 自定义的信号和槽函数所属的类必须从QObejct派生,加入Q_OBJECT
  4. 自定义信号,返回值void,不需要实现,使用signals声明,信号可以重载
  5. 自定义槽函数,参数返回值和信号相同,可以是类成员函数、全局函数、静态函数、匿名函数,支持重载
  6. 重载的槽函数和信号connect时,使用static_cast<void(CLASS::*)(args)>显式指定类型
  7. 一个信号可以绑定多个槽,但是槽函数触发时间不定,多个信号绑定一个槽,同一个处理函数
  8. disconnect和connect相反逻辑

十、Lambda表达式

  1. [捕获](参数)opt->ret{主体}
  2. []表示不捕获,[=]值拷贝捕获,[&]引用捕获,[bar]特定变量的值捕获,[&bar]特定变量的引用捕获
  3. mutable选项,值拷贝的捕获变量可以在函数主体中修改

十一、QTimer类

  1. 重复触发的定时器,new出一个QTimer,isActive判断是否在运行,start开始参数指定间隔默认重复触发,stop停止
  2. singleShot方法,mes毫秒后单次触发信号,调用回调函数

十二、QWidget类

  1. 父对象,构造时设置、调用setParent设置、调用parentWidget获取父对象(不是继承意义上的)
  2. 位置,geometry,move方法
  3. 尺寸,size、height、width
  4. 图标、标题,icon、title
  5. 信号,customContextMenuRequested右键触发此信号
  6. 槽函数,显示close、hide、show、setEnable、setDisable等

十三、QDialog类

  1. 模态显示窗口,exec方法
  2. accept槽函数,隐藏模态窗口,解除exec的阻塞,exec返回值设为QDialog::Accepted
  3. reject槽函数,隐藏模态窗口,解除exec的阻塞,exec返回值设为QDialog::Rejected
  4. done槽函数,隐藏模态窗口,解除exec的阻塞,exec返回值设为done的参数r
  5. 信号,accepted、rejected、finished

十四、QMessageBox类-QDialog的子类

  1. 只使用静态方法,显示模态对话框,消息、错误、问题、警告
  2. about、information方法,消息
  3. question方法,问题
  4. warnning方法,警告
  5. critical方法,错误
  6. QMessageBox::StandardButton枚举,有许多可以用的按键可以在模态对话框中显示

十五、QFileDialog类-QDialog的子类

  1. 只使用静态方法,打开文件夹、文件,返回QString或QStringList
  2. getExistingDirectory、getOpenFileName、getOpenFileNames、getSaveFileName
  3. 重要参数,过滤器,"Image(*.jpg *.png);; Text(*.txt)"

十六、QFontDialog类-QDialog的子类

  1. 使用静态方法,getFont返回了一个QFont对象
  2. getFont方法,bool、默认QFont、parent、标题
  3. Font的构造函数参数,字体字符串、字号、加粗、倾斜

十七、QColorDialog类-QDialog的子类

  1. 静态方法getColor方法,使用模态对话框得到一个QColor
  2. QColor对象,有红绿蓝、透明度的属性

十八、QInputDialog类-QDialog的子类

  1. 静态方法,可以输入Int、Float、可选的Qstring、可输入的单行QString、可输入的多行QString
  2. getInt,step参数,上下方向键的步长
  3. getDouble,decimals参数,浮点数的精度
  4. getItem,从一个QStringList中选择一个QString,editable参数,编辑选项
  5. getText,从LineEdit填入字符串,有EncoMode参数,选择Password,字符串变成点
  6. getMultiLineText,可以编辑的多行字符串填入,返回QString

十九、QProgressDialog类-QDialog的子类

  1. 构造函数参数,提示信息字符串、返回按键字符串、最小值、最大值、父对象
  2. 主要成员:labelText(提示信息标签)、cancelbutoton(返回按键信息)、最大值、最小值、value(进度条值)、autoReset(进度条满自动复位)、autoClose(进度条满自动关闭)、setWindowModality(设置显示模态/非模态)Qt::NonModal->非模态 Qt::WindowModal-> 模态,阻塞父窗口Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
  3. 信号,返回按键按下会发出信号canceled
  4. 槽函数,cancel、reset复位对话框

二十、QMainWindow类

  1. 菜单栏,菜单和菜单项对应QMenu和QAction,添加菜单和菜单项均可以在UI编辑器中实现,或通过addMenu、addAction实现
  2. 菜单栏的菜单项被点击会发出信号triggered
  3. 工具栏,Mainwindow右键添加一个或多个toolbar,toobar可以添加QAction,也可以添加QWidget,有一些属性,moveable、floatable等
  4. 状态栏,类型QStatusBar,方法addWidget、insertWidget、showMessage方法

二十一、QDockWidget类,停靠窗口

  1. 只有在MainWidow的停靠窗口才能移动和浮动
  2. 还有一些停靠、浮动、关闭等等属性

二十二、qrc的设置

  1. 选择项目,新加一个qrc的资源文件
  2. 设置前缀/
  3. 添加资源文件
  4. 右键可以copy路径,或者直接添加资源

二十三、布局的使用

  1. 布局分类:水平布局、垂直布局、网格布局
  2. 基于UI界面的两种布局方法,一是直接拖拽Layouts控件,二是使用QWidget控件作为容器,并右键选择布局形式(推荐)
  3. 弹簧的使用(spacer)、弹簧的默认属性是expanding,也可以设置为fixed,设置固定的高度和宽度
  4. 通过widget设置布局,每个widget都有一个layout属性,margin设置控件的边界大小,space设置控件的间隔

二十三、基于鼠标事件的右键菜单

  1. 重写void mousePressEvent(QMouseEvent *event);
  2. 如果event的button是Qt::RightButton,则创建一个Menu,并添加对应的QAction、可以关联QAction的triggered信号执行槽函数
  3. 最后在鼠标位置模态显示菜单,menu->exec(QCursor::pos())

二十四、基于窗口的菜单策略实现

# 策略1
setContextMenuPolicy(Qt::DefaultContextMenu);
重写事件处理函数void MainWindow::contextMenuEvent(QContextMenuEvent *event);
创建菜单、添加菜单项、关联信号和槽函数、菜单模态显示
# 策略2
setContextMenuPolicy(Qt::ActionsContextMenu);
添加菜单项QAction到窗口对象,关联信号和槽函数
# 策略3
this->setContextMenuPolicy(Qt::CustomContextMenu);
关联信号void QWidget::customContextMenuRequested(const QPoint &pos)到槽函数
槽函数创建菜单、添加菜单项、关联信号和槽函数、菜单模态显示
posted @ 2025-08-15 17:13  gramming  阅读(21)  评论(0)    收藏  举报