• Qt开发经验小技巧211215


    1. QMainWindow 在对停靠窗体进行排列的时候,有些不常用的设置容易遗忘,建议将 QMainWindow 的头文件函数过一遍一目了然。
    //设置停靠参数,不允许重叠,只允许拖动
    this->setDockOptions(QMainWindow::AnimatedDocks);
    
    //将底部左侧作为左侧区域,底部右侧作为右侧区域,否则底部区域会填充拉伸
    this->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
    this->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
    
    //设置停靠窗体可以放到中间,相当于嵌套布局
    this->setDockNestingEnabled(true);
    
    1. 当我们在对QModelIndex取数据的时候,常规的角色的数据(QVariant类型支持to的比如toString、toInt、toDouble等)可以很方便的取出来,特定的数据类型需要用的万能取值模板函数 T value() 取出来。
    //显示文本
    QString text = index.data(Qt::DisplayRole).toString();
    //文本对齐
    int align = index.data(Qt::TextAlignmentRole).toInt();
    //文字字体
    QFont font = index.data(Qt::FontRole).value<QFont>();
    //前景色
    QColor color = index.data(Qt::ForegroundRole).value<QColor>();
    //背景色
    QColor color = index.data(Qt::BackgroundRole).value<QColor>();
    
    1. 很多人以为拖曳只要在dropEvent事件就可以了,其实不行的,没有效果的,需要先在dragEnterEvent事件中执行event->accept()才行,不然根本没有效果,很多人尤其是初学者都挂在这里,我就是在这里摔了一跤,好疼!
    void frmMain::dropEvent(QDropEvent *event)
    {
        QList<QUrl> urls = event->mimeData()->urls();
    }
    
    void frmMain::dragEnterEvent(QDragEnterEvent *event)
    {
        if(event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
            event->setDropAction(Qt::MoveAction);
            event->accept();
        } else {
            event->ignore();
        }
    }
    
    1. Qt5.6以后内置的是webengine浏览器内核,如果需要做web交互的话必须用到 qwebchannel.js 这个文件,此文件是Qt官方提供的,所以不建议去改动其中的源码,要注意的是,由于官方对webengine的支持在不断更新,所以官方提供的对应Qt版本的 qwebchannel.js 文件也不同,意味着你要用对应提供的版本的 qwebchannel.js 文件才ok,该文件默认在 C:\Qt\Qt5.12.11\Examples\Qt-5.12.11\webchannel\shared 目录下。经过几十个Qt版本的测试发现,用高版本的 qwebchannel.js 放到低版本运行不行,低版本放到高版本可以,为了万无一失还是建议直接用对应版本的。

    2. 对于QString去除空格,有多种场景,可能需要去除左侧、右侧、所有等位置的空格。

    //字符串去空格 -1=移除左侧空格 0=移除所有空格 1=移除右侧空格 2=移除首尾空格 3=首尾清除中间留一个空格
    QString QUIHelperData::trimmed(const QString &text, int type)
    {
        QString temp = text;
        QString pattern;
        if (type == -1) {
            pattern = "^ +\\s*";
        } else if (type == 0) {
            pattern = "\\s";
            //temp.replace(" ", "");
        } else if (type == 1) {
            pattern = "\\s* +$";
        } else if (type == 2) {
            temp = temp.trimmed();
        } else if (type == 3) {
            temp = temp.simplified();
        }
    
        //调用正则表达式移除空格
        if (!pattern.isEmpty()) {
    #if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))
            temp.remove(QRegularExpression(pattern));
    #else
            temp.remove(QRegExp(pattern));
    #endif
        }
    
        return temp;
    }
    
    //测试代码
    QString text = "  a  b  c d  ";
    //结果:a  b  c d  
    QUIHelper::trimmed(text, -1);
    //结果:abcd  
    QUIHelper::trimmed(text, 0);
    //结果:  a  b  c d
    QUIHelper::trimmed(text, 1);
    //结果:a  b  c d
    QUIHelper::trimmed(text, 2);
    //结果:a b c d
    QUIHelper::trimmed(text, 3);
    
  • 相关阅读:
    【浅谈数位计数一类问题】
    2.2、idea 中写spark sql
    javascript事件之鼠标滚轮(mousewheel)和DOMMouseScroll事件
    JS 判断鼠标滚轮的上下滚动
    gulp 用法 小结
    'gulp'不是内部或者外部命令,也不是可运行的程序
    Gulp的安装与配置
    前端构建工具gulpjs的使用介绍及技巧
    【转】弧度和角度的转换
    前端构建工具gulpjs的使用介绍及技巧
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/16206360.html
Copyright © 2020-2023  润新知