纯菜鸡,最近在用Qt,随时记录一些自己遇到的(低端)问题与解决方案。
1.Qdialog关闭时候不调用析构函数
因为子窗体的构造函数中初始化了父窗体parent,当关闭子窗体时不会调用析构函数,只有关闭父窗体时,才会调用子窗体的析构函数。
若想让dialog关闭时候也调用析构函数,则需要添加声明如下:
setAttribute(Qt::WA_DeleteOnClose);
2.只在关闭时候莫名其妙出现程序异常终止(未解决)
看网上教程是说
#在main.cpp文件里,如果用MainWidget w;
#w.show;在点击退出按键关闭窗口时,会出现“程序异常终止”的提示。
#如果换成MainWidget *w = new MainWidget; w->show; 再次点击退出时,则不会出现这样的警告。
但在实际运行中还未解决。
2023/03/02更:后来发现是因为自己在析构函数中不管三七二十一直接全部delete导致,虽然退出界面发生段错误也一样是程序结束,但总归是不好。应改为如下:
if(xxx!=NULL)
xxx=NULL;
if(yyy!=NULL)
yyy=NULL;
if(zzz!=NULL)
zzz=NULL;
还有一种情况即,使用指针创建qXXX* xxx; 时,如果不指定为nullptr,则此指针并非空指针。
3.对于cloudcompare加入插件来说,需要写成widget或其他格式。
一个程序只能有一个Mainwindow,之前写了一个小程序想当成插件,却一直报错,最后发现是写成了MainWindow形式.....,并且app->exec()会阻塞程序。
exec阻塞过后,程序会退出,如果想建立连续选择、弹窗模式,可以使用show()与hide()组合,而不是exec阻塞。
4.QProcess只有在start后才可以调用close
在析构函数中关闭Process过程中疯狂报段错误,最后发现必须先start后才可以使用close。
5.Qstring使用section切割
使用section函数
QString QString::section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const
sep表示切割的字符,start与end分别为切割字符段选取的开始与结束索引。
例如将Hello,world,qt,creator 这句,使用','切割,将其切分为4块,对应索引为0,1,2,3 分别对应Hello world qt creator 若section(',',0,1); 输出则为Hello,world
6.Windows下qtcreator不能运行多个相同程序
转自:QtCreator同时运行多个程序_qt 启动多个exe_mahuifa的博客-CSDN博客