Qt中添加库:
右键项目名称文件夹(即项目树状图最上层,不是headers sources也不是.pro .h .cpp)
Qt中添加头文件:
右键项目头文件文件夹Headers
Qt刚创建文件还没编辑就在ui->setupUi(this)报错
error: cannot initialize object parameter of type 'Ui_MainWindow' with an expression of type 'Ui::MainWindow'.解决办法:打开一下mainwindow.ui即可
Qt Ui界面中添加控件后改控件对象的名字需要回车确定
鼠标点其他地方等其他操作都不能确定,将会导致调用时无法识别该对象
Qt调用NI采集卡
要使用32位编译器
Qt只添加了头文件没有添加动态库
会导致“undefined reference to”报错
Qt调用宏时出现
warning: empty expression statement has no effect; remove unnecessary ';' to silence this warning.调用宏操作会自动在句末加分号,因此不需要在调用语句后手动加分号
Qt error: reference to non-static member function must be called
对应报错函数应设置为静态类成员(如static void… \ static int…)
Qt error: invalid use of member in static member function
static型函数只能访问static型变量
以上两问题的解释[C++编译报错:invalid use of non-static member function - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/366654169)
以上两问题的解决办法[error: invalid use of non-static member function - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/86961716)
Qt warning: use of old-style cast
原因:使用了C的强制类型转换
解决办法:应该使用C++的强制类型转换(static_cast<type>(name))
Qt warning: unused parameter xxx \ variable xxx
原因:函数中有未使用的输入参数、定义的变量未使用
解决办法:(void) xxx;或者Q_UNUSED(xxx)(注意前者有分号后者无)
(.pro文件中加QMAKE_CXXFLAGS += -Wno-unused-parameter \ variable没有用)
Qt加注释的办法:
.pro文件中:该行前使用# ; .h \ .cpp文件中:该行前使用//
以上二者通用的:选中要加注释的行后ctrl + /(重复操作则取消注释)
Qt中文件命名
英文数字皆可,符号中 . \ / : 慎用(因为路径名中会用到)- 和 _ 可用
Qt定时器输出窗口报错
QObject::start\killTimer: Timers cannot be started\stop from another thread
定时器的声明在.h中(private即可),定义在构造函数中,实现在对应的函数中
Qt customplot输出窗口报错
QCPGraph* QCustomPlot::graph(int) const index out of bounds: 0
应该先在构造函数中给QCustomPlot对象添加图像(addGraph)
Qt customplot中setRange使用Qt::AlignRight的作用
最新的数据当作X轴坐标范围最右值,即达到曲线整体左移的效果(addData)
Qt customplot中setRange使用Qt::AlignLeft的作用
最新的数据当作X轴坐标范围最左值,即达到曲线整体刷新的效果(setData)
Qt不支持可变长度数组
warning: variable length array used
warning: variable length arrays are a C99 feature
在C99(C11)以外的标准不允许程序运行前无法确定数组的大小(C++普遍不支持)
可将数组大小的定义用#define宏定义,但是这样很不方便,不能随着程序运行而更改
可利用动态分配内存函数malloc(calloc,realloc),具体语法如下:
type *variable;// type为变量类型,variable为数组变量名称,length为数组长度
variable = static_cast <type*> (malloc (sizeof (type) * length)
calloc会在分配内存时自动初始化数组,realloc用来重新分配已经分配过内存的变量
Qt customplot中清除图像数据
不能使用clearGraph \ clearPlottables,否则会导致下一次绘制时没有图像可用
应该对每一个graph分别使用clear
Qt子线程更改UI
可能会导致内存崩溃等报错问题
应该使用信号-槽机制向主线程发送信号,在主线程中更改UI
Qt public private
Public变量可以在其他类的函数中使用该类的对象指针来访问
Private变量仅能在该类函数中访问
Qt slots
Public slots函数可以被其他类中的信号触发
Private slots函数仅能被该类的信号触发
Protected slots函数可以被该类及其子类中的信号触发
Qt error: allocation of incomplete type xxx / note: forward declaration of xxx / member access into incomplete type xxx
可能原因:创建设计师界面时ui.h.cpp文件名字不统一;一个项目中有两个mainwidow;
ui中主widget对象名字与ui文件名字不一致;h或cpp中类的名字与文件名字不一致
解决办法:构建(B)-清理所有项目-重启Qt(不解决也可以运行但是会报错)
Qt中文件路径使用的是/不是\
C++\python也是一样的,与windows自带的不同
Qt引用Matlab库的目录时如果目录中存在空格
使用`$$quote()`来包含目录
Qt调用matlab时matlab自带头文件出现很多警告
.pro中添加DEFINES += QT_DEPRECATED_WARINGS
Qt warning: multi-line comment…
多行注释最好使用/*…*/而不是每一行都加//
因为句中若出现\,编译器会将下一行接到本行
Qt error: skipping incompatible…
动态库的编译器版本和Qt编译器版本不同导致(32、64位)
Qt调用matlab代码初始化函数就程序异常结束
没有把matlab运行路径设置到系统的环境变量,而且设置完成后需要重启Qt
Qt调用matlab程序(未解决)
输出SetThrowSegvLongjmpSEHFilter(): filter function installed
Qt信号和槽函数注意
两者返回值类型应该相同,且槽函数的参数不应多于信号函数
QVector数组下标访问越界问题
暂未找到较好方法发现哪里出错了,只能一步步debug
Qt编译fftw静态链接库
MinGW编译器不支持#pragma comment(lib,"libfftw3-3.lib"),MSVC才支持
应该直接在项目处添加,.pro文件中会自动生成一行LIBS += -lxxx
Qt信号槽传递自定义参数类型时
需要先利用qRegisterMetaType进行注册
Qt提高编译速度
添加预编译头文件stable.h,里面包含所有需要的QT库
.pro文件中加入以下两行,这样每次重新编译只需要编译修改的部分
CONFIG += precompile_header # 使用预编译头文件
PRECOMPILED_HEADER = stable.h # 定义预编译头文件
QMAKE_CXXFLAGS += /MP # 多编译进程并行编译(MSVC可用,MinGW不行)
调用matlab dll需要在pro文件中加入的:
## MATLAB-lib
#DEFINES += MW_STDINT_H
#INCLUDEPATH += $$quote(E:/MATLAB/R2021b/extern/include)
#INCLUDEPATH += $$quote(E:/MATLAB/R2021b/extern/include/win64)
#LIBS+=-L$$quote(E:/MATLAB/R2021b/extern/lib/win64/mingw64)-llibmx
#LIBS+=-L$$quote(E:/MATLAB/R2021b/extern/lib/win64/mingw64)-llibmat
#LIBS+=-L$$quote(E:/MATLAB/R2021b/extern/lib/win64/mingw64)-llibeng
#LIBS+=-L$$quote(E:/MATLAB/R2021b/extern/lib/win64/mingw64)-lmclmcr
#LIBS+=-L$$quote(E:/MATLAB/R2021b/extern/lib/win64/mingw64)-lmclmcrrt
#win32: LIBS += -L$$PWD/./ -lfourier
#INCLUDEPATH += $$PWD/.
#DEPENDPATH += $$PWD/.
Qt加载QSS文件
新建txt文件,改后缀为QSS文件,和main.cpp放在同一目录,右键项目添加Qt Resource File,Resources里面添加前缀/QSS(可自定义前缀名)然后再添加QSS文件。
在main.cpp的int main主函数里面添加QSS文件的路径表示法":/QSS/mine.qss" 注意冒号和斜杠,双斜杠//和\\也可以,但是单反斜杠\不行,因为已经被用于转义字符如“\n”。
error: undefined reference to `_imp__fftw_execute'
头文件、lib、dll都弄好了还是不行:可能是编译器和库一个32位一个64位
warning: field 'ztrans' will be initialized after field 'verticesCnt'
构造函数时初始化成员变量的顺序 要与类声明中的变量顺序相对应 若不对应则出现如上错误 解决方法就是按照顺序进行初始化
error: cannot open output file debug\yunmaichong.exe: Permission denied
上次运行的应用程序没有正常关闭 在任务管理器中关闭即可
QIODevice::write (QFile, "E:\Desktop\Qt\mine_program\monitor_system\login"): device not open
Qt写文件失败:原因是因为资源文件(文件路径以:开头)只读不可写入,用普通文件路径方式即可