在继承QWidget时,我们在设置样式表时,不会有效果。原因在于 QWidget的paintEvent函数未实现。
解决方法:
void BaseWidget::paintEvent(QPaintEvent *event)
{
QStylePainter painter(this);
//用style画背景 (会使用setstylesheet中的内容)
QStyleOption opt;
opt.initFrom(this);
opt.rect = rect();
painter.drawPrimitive(QStyle::PE_Widget, opt);
QWidget::paintEvent(event);
}
Qt5.7+vs2013 在windows平台下qrc_images.cpp(源文件images.qrc)的大小超过30M就报fatal error C1060: compiler is out of heap space错误。
解决方法:把一个qrc文件拆成多个qrc解决的,最终qrc_images.cpp 22.2M通过编译
Qt5.7 MinGW编译器则没有这个限制。
环境qt5.x MinGW ExcelThread线程 pExcelEngine一个读写Excel的类class ExcelEngine : public QObject 其中 pExcel = new QAxObject(“Excel.Application”);
如果把pExcelEngine = new ExcelEngine;放入init函数中则会报错(错误信息忘记记录了。。。)
,放到run()中则不会。 ----应该是该类不支持跨线程操作
bool ExcelThread::init(int quetypeid,
const QString xls)
{
bool isok = true;
queTypeId = quetypeid;
xlsName = xls;
return isok;
}
void ExcelThread::run()
{
int ret = -1;
if(pExcelEngine){
delete pExcelEngine;
}
pExcelEngine = new ExcelEngine;
connect(pExcelEngine,SIGNAL(sendExcelData(QuestionData*,int)),
this,SLOT(receiveExcelData(QuestionData*,int)));
pExcelEngine->setSXlsFile(xlsName);
pExcelEngine->setExcelType(queTypeId);
int sheet = 1;
bool isopen = pExcelEngine->Open(sheet,false);
......
}
成员变量在线程run()运行无法赋值,必须声明为static变量
.h 文件中 static QString _v;
.cpp文件构造函数上方QString 类名::_v = “”;
–Plugin:找不到指定模块。1.路径错误 2.路径正确的情况下是否使用第三方库LIBS +=-L$$PWD/ -lxx
表示第三库的dll没有放入指定路径
–上图找不到BaseWidget.h 查看最后加载哪个.cpp文件图片:mainwindow.cpp
再在pro文件中加入缺失BaseClass/BaseClass.pri
下面的错误头文件明明已经加了,还提示找不到,查看提示是蓝色框框中的文件头文件没加pri(多项目编程最常见的错误)需要把当前的头文件路径加到蓝色框文件项目中。
,两个IDE(同一qt版本打开2次及以上)同时打开,后打开的会出现这个情况
解决方案:
只打开一个IDE。(一个qt版本只打开一次)
–
setMouseGrabEnabled: Not setting mouse grab for invisible window QWidgetWindow/‘QMenuClassWindow’
QMenu类中没有QAction时会报
–
原因:一个定时器周期内函数执行时间超过了定时器则.start()后无限涨内存。
解决方案:减少函数执行周期,提前new要使用的对象,优化执行时间.
解决:pro文件中加入: LIBS += -lws2_32 【类似的错误百度缺少的库】
解决:缩短项目文件及文件夹名称【编译路径太长了】
qt:错误:无法识别的命令行选项“r”
解决:查找pro,发现应该是【LIBS += -lRo模块名】错写成【-Ro模块名】(可能是我的模块的首字母是R才报-R的)
出现这种错误是因为引用的第三方库也对uint进行了声明与qt中的uint声明引起编译器错误(编译器不知道编译时用哪个声明编译)
//以谷歌的protobuf引起这个错误为例
解决方式:查找using namespace google::protobuf;注释掉
使用下列方式指定
google::protobuf::RepeatedPtrField
–
出现情况:vs2015+Qt5.9.4 使用QWebEngineView类,选择32bit编译时正常, 选择64bit编译出现上述错误,并崩溃
解决方法:在new QWebEngineView前 加上QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
解决方法:CloseHandle(HANDLE); //共享内存分配后不会自动回收
解决方法:查看报错的xxx.obj,查找xxx.cpp是否被多次加入.pro/.pri文件中
解决方法:中英文翻译,在.ui文件设置某个按钮的快捷键,出现在了.ts中。。。一定注意
解决办法:
继承QWebEnginePage的构造函数中需要传入QWebEngineProfile,不传就偶尔有问题。
解决方法:sudo find 文件目录/* -exec touch {} +