记录使用 Qt5.x 遇到的错误

记录使用 Qt5.x 遇到的错误

    • 继承于QWidget的外部样式设置无效
    • compiler is out of heap space
    • run 中 new 要在线程中释放
    • 枚举,字符串 互转
    • Qt 共享库和Plugin不容易查的错误
    • [Qt Creator的问题]Cannot retrieve debugging output
    • setMouseGrabEnabled: Not setting mouse grab for invisible window QWidgetWindow/'QMenuClassWindow'
    • 定时器.start()后内存无限涨再释放再涨
    • error: undefined reference to `__imp_select'
    • error: undefined reference to `__WSAFDIsSet'
    • Qt 多子项目套子项目时
    • QT g++: error: unrecognized command line option '-R'
    • uint”: 不明确的符号
    • WebEngineContext used before QtWebEngine::initialize() or OpenGL context creation failed
    • 挂了3天win7系统物理内存上涨,关闭软件内存依然没回收
    • LNK4042:对象被多次指定;已忽略多余的指定
    • Qt 会把.ui文件加入的快捷键作为翻译源
    • 网友: webengine退出时偶有崩溃的问题
    • 文件修改时间在未来 xxx 秒后

继承于QWidget的外部样式设置无效

在继承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);
}

compiler is out of heap space

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编译器则没有这个限制。

run 中 new 要在线程中释放

环境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 = “”;

枚举,字符串 互转

记录使用 Qt5.x 遇到的错误_第1张图片

Qt 共享库和Plugin不容易查的错误

记录使用 Qt5.x 遇到的错误_第2张图片
–Plugin:找不到指定模块。1.路径错误 2.路径正确的情况下是否使用第三方库LIBS +=-L$$PWD/ -lxx
表示第三库的dll没有放入指定路径
–上图找不到BaseWidget.h 查看最后加载哪个.cpp文件图片:mainwindow.cpp
再在pro文件中加入缺失BaseClass/BaseClass.pri

下面的错误头文件明明已经加了,还提示找不到,查看提示是蓝色框框中的文件头文件没加pri(多项目编程最常见的错误)需要把当前的头文件路径加到蓝色框文件项目中。
记录使用 Qt5.x 遇到的错误_第3张图片

[Qt Creator的问题]Cannot retrieve debugging output

,两个IDE(同一qt版本打开2次及以上)同时打开,后打开的会出现这个情况
解决方案:
只打开一个IDE。(一个qt版本只打开一次)

setMouseGrabEnabled: Not setting mouse grab for invisible window QWidgetWindow/‘QMenuClassWindow’


setMouseGrabEnabled: Not setting mouse grab for invisible window QWidgetWindow/‘QMenuClassWindow’
QMenu类中没有QAction时会报

定时器.start()后内存无限涨再释放再涨


原因:一个定时器周期内函数执行时间超过了定时器则.start()后无限涨内存。
解决方案:减少函数执行周期,提前new要使用的对象,优化执行时间.

error: undefined reference to `__imp_select’

error: undefined reference to `__WSAFDIsSet’

解决:pro文件中加入: LIBS += -lws2_32 【类似的错误百度缺少的库】

Qt 多子项目套子项目时

这里写图片描述
解决:缩短项目文件及文件夹名称【编译路径太长了】

QT g++: error: unrecognized command line option ‘-R’

qt:错误:无法识别的命令行选项“r”
解决:查找pro,发现应该是【LIBS += -lRo模块名】错写成【-Ro模块名】(可能是我的模块的首字母是R才报-R的)

uint”: 不明确的符号

出现这种错误是因为引用的第三方库也对uint进行了声明与qt中的uint声明引起编译器错误(编译器不知道编译时用哪个声明编译)
//以谷歌的protobuf引起这个错误为例
解决方式:查找using namespace google::protobuf;注释掉
使用下列方式指定
google::protobuf::RepeatedPtrField

WebEngineContext used before QtWebEngine::initialize() or OpenGL context creation failed


出现情况:vs2015+Qt5.9.4 使用QWebEngineView类,选择32bit编译时正常, 选择64bit编译出现上述错误,并崩溃
解决方法:在new QWebEngineView前 加上QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);

挂了3天win7系统物理内存上涨,关闭软件内存依然没回收

解决方法:CloseHandle(HANDLE); //共享内存分配后不会自动回收

LNK4042:对象被多次指定;已忽略多余的指定

解决方法:查看报错的xxx.obj,查找xxx.cpp是否被多次加入.pro/.pri文件中

Qt 会把.ui文件加入的快捷键作为翻译源

解决方法:中英文翻译,在.ui文件设置某个按钮的快捷键,出现在了.ts中。。。一定注意

网友: webengine退出时偶有崩溃的问题

解决办法:
继承QWebEnginePage的构造函数中需要传入QWebEngineProfile,不传就偶尔有问题。

文件修改时间在未来 xxx 秒后

解决方法:sudo find 文件目录/* -exec touch {} +

你可能感兴趣的:(Qt5)