Qt开发经验小技巧191-195

2021-12-30  本文已影响0人  feiyangqingyun
  1. 关于QList队列的处理中,我们最常用的就是调用append函数添加item,往前插入item很多人第一印象就是调用insert(0,xxx)来插入,其实QList完全提供了往前追加item的函数prepend、push_front。
QStringList list;
list << "aaa" << "bbb" << "ccc";

//往后追加 等价于 append
list.push_back("ddd");
//往前追加 等价于 prepend
list.push_front("xxx");

//往后追加
list.append("ddd");
//往前追加
list.prepend("xxx");

//指定第一个位置插入 等价于 prepend
list.insert(0, "xxx");

//输出 QList("xxx", "aaa", "bbb", "ccc", "ddd")
qDebug() << list;
  1. Qt内置了一些QList、QMap、QHash相关的类型,可以直接用,不用自己写个长长的类型。
//qwindowdefs.h
typedef QList<QWidget *> QWidgetList;
typedef QList<QWindow *> QWindowList;
typedef QHash<WId, QWidget *> QWidgetMapper;
typedef QSet<QWidget *> QWidgetSet;

//qmetatype.h
typedef QList<QVariant> QVariantList;
typedef QMap<QString, QVariant> QVariantMap;
typedef QHash<QString, QVariant> QVariantHash;
typedef QList<QByteArray> QByteArrayList;
  1. Qt的布局的边距间隔,如果在没有改动过的情况下,是会根据系统分辨率以及缩放比来决定对应的默认值,是变化的,比如在1080P分辨率是9px,在2K分辨率又变成了11px,所有你会发现你在1080P电脑编译的程序,明明看到的是6px、9px,怎么到2K、4K分辨率下间隔和边距就变得好大,如果要保持无论何种分辨率都一样,你需要手动重新设置这些值,这里有个坑,比如默认是是9,你想其他分辨率也是9,你必须先把9改成其他值比如10,然后再改成9,这样才表示真的改动,你直接9改成9是不会变化的,在属性设计器中右侧有个小箭头恢复值的,也是灰色,只有加深显示,并且出现了恢复默认值箭头,才表示你确实是改过了值。

  2. Qt对高分屏以及dpi缩放的支持越来越成熟,在Qt4时代默认的策略就是跟随系统的缩放,从Qt5.6开始提供了 AA_EnableHighDpiScaling 的属性设置开启高分屏,到了5.14以后还可以指定缩放的策略 HighDpiScaleFactorRoundingPolicy 比如支持浮点数的缩放比而不是之前的整数倍,从Qt6开始默认永远开启了 AA_EnableHighDpiScaling 属性,没法取消。很多时候我们需要两种模式,一种就是永远不应用高分屏及缩放,一种就是自动应用高分屏及缩放。

//永远不应用高分屏及缩放
int main(int argc, char *argv[])
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
    QApplication::setAttribute(Qt::AA_Use96Dpi);
#endif
#if (QT_VERSION >= QT_VERSION_CHECK(5,14,0))
    QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor);
#endif

    QApplication a(argc, argv);
    ....
    return a.exec();
}

//自动应用高分屏及缩放
//方法很多,综合对比下来还是采用配置文件指定缩放策略最适中。
//新建qt.conf文件放到可执行文件同一目录
[Platforms]
WindowsArguments = dpiawareness=0

//有时候想让用户去选择何种策略,需要开启高分屏的之后只需要将qt.conf文件放到可执行文件同一目录即可,就算代码中设置了不应用高分屏及缩放,也无效,也是优先取qt.conf文件的策略。
  1. 关于QSS要注意的坑。
上一篇下一篇

猜你喜欢

热点阅读