QT踩过的坑

#pragma comment(linker,strformat)指定入口函数和子系统
/ENTRY:WinMainCRTStrartup /subsystem:windows
类的伴生指针类使用weak_ptr的原因是指针指向的值可能已释放
为了尽可能的模拟指针的特性,并且使用时应检查lock指针是否有效
释放内存时只需要内存的地址,不一定是原始指针,for_each的lambda函数参数类型
为迭代器解引后的类型,可以传入一个元素的引用得到地址,但不能按值传入,否则
取得的地址为形参变量的地址
类内的static成员需要在外部定义,不能定义在头文件否则会多次定义错误
QT中ui_开头的头文件是对.ui编译后自动生成了,包含了XML代码用于界面设计,直接用QTDesigner就行了,需要包含进附加目录,需要将QT的dll目录添加到系统环境变量
QT中 当且仅当一个对象满足如下条件:
1.该对象是QObject的派生类
2.该对象的父类不为NULL
那么,该对象的父类删除时,该对象会被自动删除,无需手动释放。
下拉框空间可以用addItems方法添加QStringList
新建qt空项目时需要手动导入模块,qtCreator使用qmake,vs直接在project setting中设置modules
当组件没有默认布局是sizeHInt()作为其大小参考,设置dockWidget的初始大小需要定义一个继承自QWidget的类,设置sizeHint()函数,然后调用setWIdget将dockWIdget添加到此组件
QTableWidget设置item时行列必须存在
界面关闭时会触发closeEvent事件,重写该函数改写事件
QTableWIdget::setVerticalHeaderItem可以设置行首
QFileSystemModel设置根路径后还需要在TreeView设置根index
\u4e00-\u9fa5是所有汉字的unicode编码范围
protected成员可以被派生类对象访问,不能被用户代码(类外)访问。
//
QDir::currentPath()返回QDir::setCurrent()函数设置的目录,或者若没有调用函数QDir::setCurrent(),那么,程序父类进程启动的目录为当前目录
QApplication::applicationDirPath()返回执行程序运行时所在目录
设置flags时如果需要显示图标必须设置Qt::WIndowSystemMuneHint
QMessageBox指定父类后,会自动居中
类的static成员不能定义在头文件,否则两个不同的文件同时包含头文件后会出现重定义
/
/

//
如果构造函数没有声明为explicit并且只有一个参数,编译器会自动将该参数类型转换为类赋值
反之声明为explicit时只能使用精准的构造函数,无法隐式转换
/
/
qt类的构造函数中使用指针参数parent构造基类,如果parent参数非空的话,那么该构造函数使用了其父窗口的调色板,并且发送了QChildEvent事件,这会让新的窗口成为parent所指窗口的子窗口,那么当父窗口被删除时,子窗口也会自动的被删除。
与函数模板不同,类模板不能推断实例化。只能显示<>指定类型实例化

如果widget设置了Qt::WA_DeleteOnClose属性,widget将会被释放。不管widget是否可见,关闭事件都会传递给widget。即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。而主窗口不是new出来的内存,程序执行完后会直接释放内存
qt里报错类型不完整一般是没有包含对应的头文件
MDI程序要在addSubWindow()方法里设置WindowFlags
QFileDialog的过滤器用空格分割同一类型的不同后缀,两个分号分割不同类型
如:C程序文件(.c *.h *.cpp);;
QLCDNumber 设置数字颜色时要注意: 函数setSegmentStyle(QLCDNumber::Flat)中选择Flat属性,否则在setColor()设置数字颜色时不生效
QMdiArea的setViewMode方法可以设置两种显示方法,当为Tabbed时,可以设置关闭按钮,
此关闭按钮自动连接close()信号,不需要像tabWidget手动链接
Qt::FramelessWindowHint和Qt::SplashScreen的区别是前者会显示在任务栏
//
event->button()返回当前事件被按下的按键,buttons()返回哪些按键处于持续按下状态
layout的spacing表示各空间之间的间距,margin表示layout与窗口四周的间距
DataStream的writeRawData不写入数据长度,读取时需要指定固定的长度/
而writeBytes会写入字节数组的长度,适合写入字符串,读取时会同时取出字符串长度
只有鼠标单击时才会触发mouseMoveEvent,除非设置mouseTracking为true
drawArc方法的旋转角度最大为16
360
/***
//窗口和视口
视口决定绘图有效区域,使用设备坐标系统
窗口表示视口的原点坐标,使用逻辑坐标

使用UI设计器提升组件的时候一般不用global include,直接在程序目录查找头文件
statusBar的addWidget方法会重新设置父窗口为statusBar
如果禁用鼠标跟踪(默认),小部件只在鼠标移动时至少按下一个鼠标按钮时接收鼠标移动事件。
新建带有Q_OBJECT的头文件时在头文件属性里设置QT元对象编译,可以自动生成moc.cpp

QMediaPlayer头文件,包含之前需要配置对应的模块
#include<QtMultimedia/QMediaPlayer>
#include<QtMultiMediaWidgets/QVideoWidget>
#include<QtMultiMedia/QMediaPlaylist>