【发布时间】:2014-08-13 13:15:57
【问题描述】:
我在文档中找不到任何内容。我找到了一个使用 PyQt 或其他东西的解决方案,但我宁愿不必使用它。另外,如果有信号就好了,但看起来好像没有。
【问题讨论】:
标签: qt
我在文档中找不到任何内容。我找到了一个使用 PyQt 或其他东西的解决方案,但我宁愿不必使用它。另外,如果有信号就好了,但看起来好像没有。
【问题讨论】:
标签: qt
1.当您按照 Sam 的建议 (m_lineEdit->installEventFilter(this);) 安装事件过滤器时,您需要处理 QEvent::KeyPress 并检查密钥是否等于 Qt::Key_Tab:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_lineEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Tab)
{
//do what you need;
return true;
}
}
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
2.另一种方法是创建一个继承自QLineEdit的新类并重新实现keyPressEvent:
void LineEdit::keyPressEvent(QKeyEvent* event)
{
if (keyEvent->key() == Qt::Key_Tab)
{
emit tabPressed();
return;
}
QLineEdit::keyPressEvent(event);
}
【讨论】:
您应该可以使用QObject::installEventFilter(QObject*) 来拦截按键事件。这里有一个例子:http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter。
【讨论】: