一、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