最近在实现一个简单的文件传输工具时,在路径框使用QComboBox,在输入路径之后按下enter键,然后向远端设备发送请求该路径下的文件信息。
在此需要捕获enter键,方法比较简单,在此做个记录。
自定义一个类,继承QComboBox,重写 keyReleaseEvent函数即可,代码如下:
//header file
#ifndef COMBOBOX_H
#define COMBOBOX_H
#include <QComboBox>
#include <QObject>
#include <QKeyEvent>
#include <QEvent>
class ComboBox : public QComboBox
{
Q_OBJECT
public:
explicit ComboBox(QWidget* parent = nullptr);
protected:
void keyReleaseEvent(QKeyEvent *e);
signals:
void keyEnterReleased();
};
#endif // COMBOBOX_H
// source file
#include "combobox.h"
#include <QDebug>
ComboBox::ComboBox(QWidget *parent) : QComboBox (parent)
{
}
void ComboBox::keyReleaseEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return)
{
qDebug() << "enter released";
emit keyEnterReleased();
}
}
注意使用时,需要在UI上将QComboBox提升为ComboBox(自己写的class name)。然后connect keyEnterReleased信号:
connect(ui->comboBox_ttu, &ComboBox::keyEnterReleased, this, &MainWindow::TTUComboBoxEnter);
完。