我在我Qt的应用程序中有一个控制台输入,它是一个QLineEdit,所有Ui都是通过设计的QtDesigner.是否有任何简单的方法来处理向上和向下箭头以实现输入历史记录?'转到插槽'只显示returnProcessed信号,我无法看到处理上下箭头:(
ser*_*nko 15
您可以在窗口类中安装事件过滤器并观察行编辑事件.以下是一个例子:
在窗口类上声明事件处理程序方法:
class MainWindow : public QMainWindow {
Q_OBJECT
...
protected:
void changeEvent(QEvent *e);
...
};
Run Code Online (Sandbox Code Playgroud)
窗口构造函数
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
ui->lineEdit->installEventFilter(this);
}
Run Code Online (Sandbox Code Playgroud)
事件处理器实现:
bool MainWindow::eventFilter(QObject* obj, QEvent *event)
{
if (obj == ui->lineEdit)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Up)
{
qDebug() << "lineEdit -> Qt::Key_Up";
return true;
}
else if(keyEvent->key() == Qt::Key_Down)
{
qDebug() << "lineEdit -> Qt::Key_Down";
return true;
}
}
return false;
}
return QMainWindow::eventFilter(obj, event);
}
Run Code Online (Sandbox Code Playgroud)
希望这有帮助,问候
您可以继承QLineEdit并重新实现虚拟keyPressEvent方法来处理您的特殊键.
void MyLineEdit::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Up){
// move back in history
}
else if(event->key() == Qt::Key_Down){
// move forward in history
}
else{
// default handler for event
QLineEdit::keyPressEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12187 次 |
| 最近记录: |