我想通过模拟QKeySequence::Copy
的发射来测试Qt小部件的“复制”功能,但是QTest::keyClick
不接受QKeySequence
(或QKeySequence::StandardKey
):
void QTest::keyClick ( QWidget * widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1 ) [static]
void QTest::keyClick ( QWidget * widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1 ) [static]
我可以将代码硬拷贝为Ctrl + C:
QTest::keyClick(widget, Qt::Key_C, Qt::ControlModifier)
但是,这将相当脆弱,并且在其他环境中测试我的小部件时可能会失败,因此,我尽可能使用
QKeySequence::Copy
。我知道我可以使用
QKeySequence::QKeySequence(StandardKey)
查找主绑定,但看不到如何提取键和修饰符。另外,还有其他方法可以得到相同的结果吗? 最佳答案
解决:operator[]
返回Qt::Key
和Qt::KeyboardModifiers
标志类型的按位组合(似乎在任何地方都没有记录)。因此,提取键和修饰符的方法是用Qt::KeyboardModifierMask
掩盖(也完全未记录):
QKeySequence binding(QKeySequence::Copy);
for (uint i = 0; i < binding.count(); ++i) {
uint key = binding[i];
QTest::keyClick(widget, Qt::Key(key & ~Qt::KeyboardModifierMask),
Qt::KeyboardModifiers(key & Qt::KeyboardModifierMask));
}