QT使用小结

1. 在QT中使用std::cout

在QT中如果要在控制台输出信息,一般是使用qDebug(),如果要使用C++中的std::cout该怎么办呢?
在QT5.12下,是可以直接使用std::cout的,但是并不会马上输出,会等到缓存区满了才输出,或者每次输出都输出一个换行endl

2. 引入第三方库

QT作为一个UI开发工具,通常需要与第三方工具相结合一起进行开发,比如VTK、ITK等。在vscode中,可以通过配置来引入第三方的*.lib,include等文件,那么在QT中怎么引入呢?
在QT5.12下,其中一种方法是这样的。可以直接配置QT项目的.pro文件,在文件中增加相关的内容,例如要引入VTK。那么在.pro文件中增加以下内容:

INCLUDEPATH += xxx/include/vtk-9.0
LIBS += $$quote(xxx/lib/*.lib)

3. 格式化字符串

之前一直用的是python,里面的字符串格式化特别方便。切换到了C++,可能是不太熟的原因,格式化字符串成了我心头的痛💔。经过搜索后,发现有以下方法挺不错的:

  • QString().arg()
  • QString().Sprintf()

这里举几个简单的例子:

QString().Sprintf("[%d, %d, %d]", 1, 2, 3);
QString().Sprintf("%s %s!", "Hello", "QT");

熟悉printf的同学估计会首选QString().Sprintf()😄

4. ITK与VTK的混合使用

从源码开始编译ITK时,记得勾选Module_ITKVTKGlue

5. C2001: 常量中有换行符

这个问题通常是由在代码中含有中文字符串且使用的C++编译器是MSVC造成的。几个解决方法:

6. moveToThread

QT中如果使用多线程,其中一种方式是将完成任务的对象移动到子线程上去,有时候对先把任务完成后需要移回到主线程,如果直接在主线程中使用moveToThread(mainThread),这样是不可行的,不可将其他线程的对象拉到本线程,因此需要在子线程中将对象推到主线程

posted @ 2021-11-01 18:11  Milkha  阅读(308)  评论(0)    收藏  举报