Qt 学习相关问题汇总

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写文件失败:原因是因为资源文件(文件路径以:开头)只读不可写入,用普通文件路径方式即可

  • 46
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值