《QDebug 2023年2月》

一、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 放进去即可。

猜你喜欢

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