Qt 杂录

作者: BrokenRainK | 来源:发表于2019-06-04 17:28 被阅读0次

    UUID

    #include <QUuid>
    QString uuid = QUuid::createUuid().toString().replace("{", "").replace("}", "").replace("-", "").toUpper();
    

    MD5

    #include <QCryptographicHash>
    QString md5 = QCryptographicHash::hash("Biao", QCryptographicHash::Md5).toHex();
    

    随机数

    Qt5.10后推荐使用 QRandomGenerator 生成随机数,而不再推荐qrand():

    #include <QRandomGenerator>
    QRandomGenerator::global()->generate();   //(0, MAX_INT)
    QRandomGenerator::global()->bounded(100); //(0, 100)
    

    QString获取中文字符串长度

    QString str("ab中文");
    int len = str.length();              //len为4
    len = str.toLocal8Bit().length();    //len为8, UTF-8编码下QString中一个中文占3个字节
    

    connect使用有重载的信号或槽函数

    方法一: 使用static_cast<>()进行强制类型转换

    方法一

    以QSpinBox为例:
    QSpinBox有一个重载信号void valueChanged(int i)和void valueChanged(const QString &text)。

    使用connect(mySpinBox, &QSpinBox::valueChanged, mySlider, &QSlider::setValue)会编译报错,
    因为编译器不知道该使用哪一个valueChanged信号。
    

    正确使用

    connect(mySpinBox, SIGNAL(valueChanged(int)), mySlider, SLOT(setValue(int));
    或
    connect(mySpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), mySlider, &QSlider::setValue);
    

    方法二

    方法二
    使用QOverload<>::of()或者qOverload<>()(需要C++14支持)
    例如:connect(mySpinBox,QOverload<int>::of(&QSpinBox::valueChanged), mySlider,&QSlider::setValue);
    

    去除QLineEdit、QTextEdit等右键菜单

    setContextMenuPolicy(Qt::NoContextMenu);
    

    TabWidget去除选项卡的关闭按钮

    tabWidget->tabBar()->setTabButton(0, QTabBar::RightSide, nullptr);
    

    msvc-version.conf loaded but QMAKE_MSC_VER isn't set解决方案

    删除和项目有关的所有.qmake.stash以及构建目录(包含同级、上级、上上级,只要相关的.qmake.stash)
    

    设置程序执行时库的查找路径

    pro文件中添加
    QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\'/lib/              //库查找目录为可执行程序目录下的lib目录
    

    相关文章

      网友评论

          本文标题:Qt 杂录

          本文链接:https://www.haomeiwen.com/subject/jkerxctx.html