《QDebug 2019年11月》

一、Qt Widgets 问题交流

1.打开项目只有pro文件

这个一般出现在刚安装Qt Creator时,没有配置好环境,如本来需要配置GCC,但是他默认设置的Clang。

先检查下【工具->选项】中的配置,kits,Qt,编译器等:

因为我目前没有错误配置的截图,所以只能模拟下,先把kits中的编译器去掉并保存:

这时候再去打开一个项目:

没有配置kits,也是不能正常的加载项目:

怎么区分时项目问题还是环境问题呢,你新建个项目或者打开示例,如果能正常构建运行,那你的环境配置一般是正常的。

2.配置正确的OpenSSL动态库

Qt从5.12.4开始支持OpenSSL1.1,而需要copy到运行路径下的DLL库文件也改变了:

openssl1.0.x需要的是:libeay32.dll和ssleay32.dll

openssl1.1.x需要的是:libcrypto-1_1.dll和libssl-1_1.dll

此外还要注意区分不同的编译器,以及区分32/64位。

官方帖子:https://www.qt.io/blog/2019/06/17/qt-5-12-4-released-support-openssl-1-1-1

3.QSettings路径在哪儿?

一般Windows上,可以指定到注册表中,也可以放到ini文件里。

如果你是通过设置组织名和应用名的形式,那么一般在注册表中(regedit打开注册表):

//main.cpp部分代码
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    app.setOrganizationName("GongJianBoON");
    app.setOrganizationDomain("GongJianBoOD");
    app.setApplicationName("GongJianBoAN");

    MainWindow w;
    w.show();
    return app.exec();
}
//使用部分代码   
#include <QSettings>
... ...
QSettings settings;
settings.setValue("width",123);
settings.setValue("state","off");

qDebug()<<settings.value("width",0).toInt();
qDebug()<<settings.value("state","none").toString();

我们可以去注册表找到配置项(路径参考图中):

当然,也可以在QSettings的构造中指定参数 ,比如指定ini路径,并指定为ini格式:

 QSettings settings(R"(wind.ini)",QSettings::IniFormat);

这样我们的配置就在ini文件中了:

参考:https://doc.qt.io/qt-5/qsettings.html

4.查找子控件

使用QObject的findChild或findChildren方法,可以查找子孙对象。打开Qt助手,搜索findchild可以看到示例。

如,根据objectName查找直接子对象:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildrenOnly);
QListWidget *list = parentWidget->findChild<QListWidget *>(QString(), Qt::FindDirectChildrenOnly);

或者使用findChildren查找出对象集合QList<T>:

QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(QString(), Qt::FindDirectChildrenOnly);

 注意这个Qt::FindChildOption的枚举参数,有两个选项,Qt::FindDirectChildrenOnly查找直接子对象,Qt::FindChildrenRecursively递归查找子对象。

5.C1060: 编译器的堆空间不足

可能是资源文件过大,可以在pro文件中加上  CONFIG += resources_big ,很遗憾我没见过相关文档

好像资源十兆左右就会出这个问题。

二、Qt Quick 问题交流

1.Settings的路径在哪儿?

一般Windows上,可以指定到注册表中,也可以放到ini文件里。Settings基于QSettings,但是提供的接口相对更简单。

如果没有指定fileName,通过设置组织名和应用名的形式,那么一般在注册表中(regedit打开注册表):

//main.cpp部分代码
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    app.setOrganizationName("GongJianBoON");
    app.setOrganizationDomain("GongJianBoOD");
    app.setApplicationName("GongJianBoAN");

    MainWindow w;
    w.show();
    return app.exec();
}

(注册表路径参考下图)

如果指定了ini文件路径,就不用再main.cpp里指定那些参数了,配置会写在指定的路径里。

2.使用Shapes绘制的图形,用QtGraphicalEffects加阴影效果不对

使用Shapes绘制的图形,用QtGraphicalEffects模块的阴影或者光晕,出来的效果不对。在我的测试中,主要是1px的顶边和底边效果不对。

没办法,这种带特效的还是用贴图最简单,或者贴图配合QtGraphicalEffects也是正常的。

3.使用WebEngine出现Qt::AA_ShareOpenGLContexts的相关的警告

如果调用了WebEngine的初始化:

运行时会出现警告:

需要在程序构造QCoreApplication/QApplication之前设置Qt::AA_ShareOpenGLContexts属性:

本节参考:https://blog.csdn.net/weizehua/article/details/51445461?utm_source=blogxgwz5

发布了95 篇原创文章 · 获赞 26 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/gongjianbo1992/article/details/102878338