首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候‘`QKeySequence::match()’返回` `QKeySequence::PartialMatch`‘?

什么时候‘`QKeySequence::match()’返回` `QKeySequence::PartialMatch`‘?
EN

Stack Overflow用户
提问于 2021-05-29 12:08:44
回答 1查看 66关注 0票数 0

哪些序列部分匹配?

我认为1部分地匹配了Ctrl+1,但它不匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-30 17:29:55

源代码拿来的,

代码语言:javascript
复制
QKeySequence::SequenceMatch QKeySequence::matches(const QKeySequence &seq) const {
    uint userN = count(),
          seqN = seq.count();

    if (userN > seqN)
        return NoMatch;

    // If equal in length, we have a potential ExactMatch sequence,
    // else we already know it can only be partial.
    SequenceMatch match = (userN == seqN ? ExactMatch : PartialMatch);

    for (uint i = 0; i < userN; ++i) {
        QKeyCombination userKey = (*this)[i],
                    sequenceKey = seq[i];
        if (userKey != sequenceKey)
            return NoMatch;
    }
    return match;
}

看来,

  1. 比较序列必须大于源序列。
  2. 比较序列必须从源开始。

所以如果你有,

代码语言:javascript
复制
#include "mainwindow.h"

#include <QApplication>

#include <QDebug>
#include <QKeySequence>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QKeySequence ks_1{Qt::CTRL, Qt::Key_X, Qt::Key_Y};

    QKeySequence ks_2{Qt::CTRL};
    QKeySequence ks_3{Qt::CTRL, Qt::Key_X};
    QKeySequence ks_4{Qt::CTRL, Qt::Key_X, Qt::Key_Y};
    QKeySequence ks_5{Qt::CTRL, Qt::Key_X, Qt::Key_Y, Qt::Key_Z};
    qDebug() << ks_1.count() << ks_2.count() << ks_1.matches(ks_2);
    qDebug() << ks_1.count() << ks_3.count() << ks_1.matches(ks_3);
    qDebug() << ks_1.count() << ks_4.count() << ks_1.matches(ks_4);
    qDebug() << ks_1.count() << ks_5.count() << ks_1.matches(ks_5);

    return a.exec();
}

ks_4将是完全匹配的,而ks_5将是部分匹配。请注意,长度是使用count()获取的,它来自于源:

代码语言:javascript
复制
int QKeySequence::count() const
{
    return int(std::distance(d->key, std::find(d->key, d->key + QKeySequencePrivate::MaxKeyCount, 0)));
}

因此,如果前面的示例声明为:

代码语言:javascript
复制
QKeySequence ks_1{Qt::CTRL + Qt::Key_X + Qt::Key_Y};

QKeySequence ks_2{Qt::CTRL};
QKeySequence ks_3{Qt::CTRL + Qt::Key_X};
QKeySequence ks_4{Qt::CTRL + Qt::Key_X + Qt::Key_Y};
QKeySequence ks_5{Qt::CTRL + Qt::Key_X + Qt::Key_Y + Qt::Key_Z};

由于count()对上述所有情况都返回1,所以所有情况都不匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67751209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档