zoukankan      html  css  js  c++  java
  • Qt开发经验小技巧191195

    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要注意的坑。
    • qss源自css,相当于css的一个子集,主要支持的是css2标准,很多网上的css3的标准的写法在qss这里是不生效的,所以不要大惊小怪。
    • qss也不是完全支持所有的css2,比如text-align官方文档就有说明,只支持 QPushButton and QProgressBar,务必看清楚。
    • 有时候偷懒直接来一句 *{xxx},你会发现大部分是应用了,也有小部分或者极个别没有应用,你可能需要在对应的窗体中 this->setStyleSheet() 来设置。
    • qss的执行是有优先级的,如果没有指定父对象,则对所有的应用,比如在窗体widget中 {color:#ff0000;} 这样会对widget以及widget的所有子对象应用该样式,这种问题各大Qt群每周都在上演,你会发现各种奇奇怪怪的异样不正常,怎么办呢,你需要指定类名或者对象名,比如 #widget{color:#ff0000;} 这样就只会对widget对象应用该样式,另一种写法 QWidget#widget{color:#ff0000;},只想对窗体本身而不是子控件按钮标签等 .QWidget{color:#ff0000;} ,具体详细规则参见官方说明。
    • qss整体来说还是可以的,尽管有着有那的BUG,怀着包容的心对待它。
  • 相关阅读:
    【转】Visual Studio 2008中使用科学计算库GSL
    【转】[Python Tip]如何在Windows下方便地进入命令行运行程序
    【转】URL Encoding (URL转义字符)
    RDLC报表,纯文字内容,动态数据源 解决方案
    C# 数值计算
    标准库List使用注意
    VS2008 运行出现 “无法启动该程序 计算机中丢失 MSVCR90D.dll”
    数据结构在游戏中的简单应用(转)
    SQL SERVER 2005 四种排序函数
    2010.11.30
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/15747825.html
Copyright © 2011-2022 走看看