一、Qt Widgets 问题交流
二、Qt Quick 问题交流
三、其他
1.使用 QDir::toNativeSeparators() 转换路径中的 "/" 分割符为 "\"
在网上抄代码的时候,总会遇到这样的代码:
file_path.replace("/", "\\");
因为 Windows 上有些接口需要用右斜杠 "\",所以需要把路径中的 "/" 分隔符全部替换。Qt 本身封装了 QDir::toNativeSeparators() 静态成员函数来完成这个操作,其内部实现如下:
QString QDir::toNativeSeparators(const QString &pathName)
{
#if defined(Q_OS_WIN)
int i = pathName.indexOf(QLatin1Char('/'));
if (i != -1) {
QString n(pathName);
QChar * const data = n.data();
data[i++] = QLatin1Char('\\');
for (; i < n.length(); ++i) {
if (data[i] == QLatin1Char('/'))
data[i] = QLatin1Char('\\');
}
return n;
}
#endif
return pathName;
}
2.Win10 上用 explorer /select, filepath 命令打开资源管理器并选中文件
第一次可能只会打开文件夹而没有选中文件,但是第二次执行相同的文件夹路径就能选中,待解决。
3.QTcpSocket 重连后 write 崩溃
流程是这样的,Client 连接上 Server 后就发送心跳包,连接断开/异常会重连,但是重连后 Client 在 write 的时候会崩溃。调用栈如下:
根据网上的解决方案,处理 QTcpSocket 的 disconnected 信号槽连接时,加上 Qt::QueuedConnection 参数。
在 Qt Bug Tracker 里也有类似的反馈:https://bugreports.qt.io/browse/QTBUG-98395
4.qt.conf 文件放资源系统中
根据文档描述:https://doc.qt.io/qt-6/qt-conf.html
qt.conf 文件会从以下位置加载:
1. 资源系统路径 :/qt/etc/qt.conf
2. macOS 系统,在应用程序捆绑包内的资源目录中 application.app/Contents/Resources/qt.conf
3. 在可执行程序目录,即 QCoreApplication::applicationDirPath() + QDir::separator() + "qt.conf"
所以,我们在资源文件添加一个 qt/etc 的前缀,然后把 qt.conf 放进去即可。