QT积累

临时存储库为

https://download.qt.io/online/qtsdkrepository/windows_x86/root/qt/

线程退出双重判断

if(true == m_pThread->isRunning())
{
    emit signal_quitWork();
    m_pThread->quit();
    m_pThread->wait();
}
if(true == m_pThread->isRunning() || false == m_pThread->isFinished())
{
    printf("thread still runing,terminating \n");
    m_pThread->terminate();
}

QThread::quit does nothing if the thread does not have an event loop or some code in the thread is blocking the event loop. So it will not necessarily stop the thread.

So QThread::quit tells the thread’s event loop to exit. After calling it the thread will get finished as soon as the control returns to the event loop of the thread.

You will have to add some kind of abort flag if you are blocking event loop for example by working in a loop. This can be done by a boolean member variable that is public or at least has a public setter method. Then you can tell the thread to exit ASAP from outside (e.g. from your main thread) by setting the abort flag. Of course this will require your thread code to check the abort flag at regular intervals.

线程调用wait函数时,阻塞一直等到该线程执行完成之后再执行wait()下面的代码.
无参的时候是阻塞的,如果子线程函数不能退出就一直阻塞。

PRO文件加载动态库

windows平台以加载SDL2动态库为例

INCLUDEPATH += $$PWD/../../SDL2-devel-2.0.14-VC/SDL2-2.0.14/include
LIBS += -L$$PWD/../../SDL2-devel-2.0.14-VC/SDL2-2.0.14/lib/x64 -lSDL2

注册元数据

跨线程传参,如果参数是自定义类型,则需要注册成元数据类型。哪里connect哪里注册
比如

```cpp
struct student{
	QString age;
}
qRegisterMetaType<student>("student");//注册
connect(		);//哪里connect哪里注册

QT错误码

Qt:QT exited with code -1073741510
这个报错是由于开启了事件循环,而在关闭窗口或者(Ctrl+c)结束应用时,程序被挂起,事件循环继续,直到遇到QCoreApplication :: exit()。
解决方案:在主线程析构函数中关闭子线程操作,并且等待子线程关闭完成(可以加一个延时,具体时间需要根据子线程关闭时间设置)。
exited with code -1073741819
某个变量声bai明了,没有初始du化,或zhi是初始化无dao效,然而后边直接使zhuan用到。
着重注意connect中是否有未初始化的地方,或者控件搭配使用的先后顺序。即指针问题

qrc文件
图标文件需要与qrc文件位于同一目录下或者在该目录的子目录中。
路径可以经过右击Recourses中的png直接获取path。

设置边框颜色
第一种: ui->frame_2->setStyleSheet(“border:2px solid red;”);
把这个框内的所有控件的边框颜色改变
在这里插入图片描述

第二种: ui->frame_2->setStyleSheet("#frame_2{border:2px solid red}");
只设置本身边框
在这里插入图片描述

HEAP CORRUPTION DETECTED: after Normal block (#53661) at 0x00000240E9E835E0. CRT detected that the application wrote to memory after end of heap buffer.

CRT检测到应用程序在堆缓冲区结束后写入内存。说明内存分配小了
结论:出现这个问题的主要原因是:分配的内存少于实际使用的内测。
比如:char* data = malloc(sizeof(char)*3) //分配3个地址却使用了4个
data[4];
最快的检测方法:直接先加大自己分配的内存大小,然后看是否还会报错。如果不会报错了,那说明就是这个问题。 然后自己慢慢分析到底是哪里使用了未分配的内存吧!这是最难的活,但是也能自己慢慢分析了。
最快的解决方法:如果不care内存的话,当然可以直接分配一个大内存,但是这样有些奢侈罢了。

查找内存泄漏的位置

  1. 借助辅助工具VLD
  2. 把局部功能放到死循环,如果有泄漏可以很快发现
  3. 注释掉一部分,然后逐个功能循环
    4.注意一些控件,如果这个控件一直写,那么他就会泄漏,而且VLD查不出来。
    比如QT textBrowser,当成日志的输入,但是如果一直输入而不删除,就会出现内存泄漏

界面卡死:

界面线程中是否被阻塞,阻塞可能是界面线程有死循环或者界面线程在等子线程退出
比如:QT多线程wait();//阻塞退出,wait(500);//只阻塞500ms,往下执行。
当线程中的socket和QT的wait()都是阻塞的时候就会造成界面卡死。因为wait()会等待线程结束才往下执行,
而线程中还要等待socket结束才结束,所以界面会卡死。

QTableView 设置宽度

方法一:

ui->tableView_3->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

方法二:setColumnWidth()必须在setColumnCount()和setModel()后才能有效

m_Model->setColumnCount(1);
ui->tableView_3->setModel(m_Model);//setRowHeight
ui->tableView_3->setColumnWidth(0,1000);

设置 QComboBox的下拉框Item高度

QStyledItemDelegate* itemDelegate = new QStyledItemDelegate();
ui->comboBox->setItemDelegate(itemDelegate);
ui->comboBox->setStyleSheet("QComboBox QAbstractItemView::item { min-height: 40px; min-width: 60px; }");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值