Как отключить ярлыки для QComboBox в qt? - PullRequest
0 голосов
/ 17 мая 2018

Я искал ответы в Интернете, но не нашел решения, которое решило бы мою проблему. У меня такой вопрос: у меня есть QComboBox, скажем, я добавил к этому три элемента:

ui->comboBox->addItem("First");
ui->comboBox->addItem("Second");
ui->comboBox->addItem("Third");

Затем, если я нажму S на клавиатуре, элемент изменится на Second, если я нажму T, поэтому элемент просто изменится на Third.

Как это отключить?

1 Ответ

0 голосов
/ 17 мая 2018

Возможным решением является реализация eventfilter, которая предотвращает использование букв в QComboBox:

#include <QApplication>
#include <QComboBox>
#include <QKeyEvent>

class Helper: public QObject{
    QComboBox *m_combo;
public:
    using QObject::QObject;
    void setComboBox(QComboBox *combo){
        m_combo = combo;
        m_combo->installEventFilter(this);
    }
    bool eventFilter(QObject *watched, QEvent *event){
        if(m_combo){
            if(m_combo == watched && event->type() == QEvent::KeyPress){
               QKeyEvent *ke = static_cast<QKeyEvent *>(event);
               if(!ke->text().isEmpty())
                    return true;
            }
        }
        return QObject::eventFilter(watched, event);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QComboBox w;
    w.addItems({"First", "Second","Third"});
    Helper helper;
    helper.setComboBox(&w);
    w.show();
    return a.exec();
}
...