[英]How to implement shortcut input box in Qt
在像qtcreator这样的软件中,您可以看到以下内容:
基本上是一些单击时要求您按下某种键盘组合以记录快捷方式的框。
如何在Qt中创建类似的内容? 到目前为止,我只能使用常规文本框来实现此目的,在常规文本框中,用户必须自己键入组合,并且如果显示的消息框不正确,则如果用户不必键入内容,它将更加简单。就像“ Ctrl + F2”一样,而是单击这些键。
是否有任何Qt小部件?
使用QKeySequenceEdit (从Qt 5.2开始可用)。 它允许您像在Qt Designer中一样记录快捷键。
如果您需要Qt 4.x的小部件,我以前已经实现了。 三个关键部分是:
小部件记录了多个快捷方式,例如在Designer中。 快捷键可以通过Delete或Backspace清除。
#define MAX_SHORTCUTS 3
QString ShortcutLineEdit::keyEventToString(QKeyEvent *e)
{
int keyInt = e->key();
QString seqStr = QKeySequence(e->key()).toString();
if (seqStr.isEmpty() ||
keyInt == Qt::Key_Control ||
keyInt == Qt::Key_Alt || keyInt == Qt::Key_AltGr ||
keyInt == Qt::Key_Meta ||
keyInt == Qt::Key_Shift)
{
return "";
}
QStringList sequenceStr;
if (e->modifiers() & Qt::ControlModifier)
sequenceStr << "Ctrl";
if (e->modifiers() & Qt::AltModifier)
sequenceStr << "Alt";
if (e->modifiers() & Qt::ShiftModifier)
sequenceStr << "Shift";
if (e->modifiers() & Qt::MetaModifier)
sequenceStr << "Meta";
return sequenceStr.join("+") + (sequenceStr.isEmpty() ? "" : "+") + seqStr;
}
void ShortcutLineEdit::keyPressEvent(QKeyEvent *e)
{
QString text =text();
int keyInt = e->key();
bool modifiers = e->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier | Qt::MetaModifier);
if (!modifiers && (keyInt == Qt::Key_Delete || keyInt == Qt::Key_Backspace)) {
setText("");
return;
}
QString sequenceStr = keyEventToString(e);
if (sequenceStr == "") {
QLineEdit::keyPressEvent(e);
return;
}
if (text.split(", ").size() >= MAX_SHORTCUTS)
text = "";
if (!text.isEmpty())
text += ", ";
setText(text + sequenceStr);
}
void ShortcutLineEdit::apply()
{
QList<QKeySequence> sequenceList;
QStringList sequenceStrList = text().split(", ");
foreach (QString str, sequenceStrList)
sequenceList << QKeySequence(str);
// use sequenceList somehow
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.