1.使用Qt4.7以前的版本,启动Qt的多线程去进行数据处理,子线程继承QThread,直接start去启动线程,这样是无法启动子线程的,虽然编译不会出错,有多线程一定要考虑多线程是否会启动成功,可以打印线程的ID,查看线程ID是否是一个新线程ID,包括线程内的槽函数、run函数所在线程的ID。直接在槽函数或者run函数内调用下面的方法即可,返回的是函数执行时所在线程的ID。

 QThread::currentThreadId();

2.Qt的子线程无法直接操作UI界面控件

3.Qt最小化后恢复界面假死冻结,加上代码

void showEvent(QShowEvent *e)
{
setAttribute(Qt::WA_Mapped);
QWidget::showEvent(e);
}

4.Qt中继承QWidget之后,样式表不起作用

方法一:设置属性 this->setAttribute(Qt::WA_StyledBackground, true);
方法二:改成继承QFrame,因为QFrame自带paintEvent函数已做了实现,在使用样式表时会进行解析和绘制。
方法三:重新实现QWidget的paintEvent函数时,使用QStylePainter绘制。
void Widget::paintEvent(QPaintEvent *)
{
QStyleOption option;
option.initFrom(this);
QPainter painter(this);
style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this);
}

5.Qt打包发布,有很多办法,Qt5以后提供了打包工具windeployqt(linux上为linuxdeployqt,mac上为macdeployqt)可以很方便的将应用程序打包,使用下来发现也不是万能的,有时候会多打包一些没有依赖的文件,有时候又会忘记打包一些插件尤其是用了qml的情况下,而且不能识别第三方库,比如程序依赖ffmpeg,则对应的库需要自行拷贝,终极大法就是将你的可执行文件复制到Qt安装目录下的bin目录,然后整个一起打包,挨个删除不大可能依赖的组件,直到删到正常运行为止。