Управление клавишей escape для выхода из программы

Я не знаю, как реализовать управление клавишей escape для выхода из программы. Я также не знаю, где поместить это в мой код, потому что, если я помещу это в метод, как он может выйти где угодно?

Это мой фактический код:

    #include <iostream>
#include <QApplication>
#include <QPushButton>
#include <QLineEdit>
#include <QFormLayout>
#include <QDebug>
#include "LibQt.hpp"
LibQt::LibQt() : QWidget()
{
this->size_x = 500;
this->size_y = 500;
QWidget::setWindowTitle("The Plazza");
setFixedSize(this->size_x, this->size_y);
manageOrder();
}

LibQt::~LibQt()
{
}
void LibQt::manageOrder()
{
this->testline = new QLineEdit;
this->m_button = new QPushButton("Send Order");
QFormLayout *converLayout = new QFormLayout;

this->m_button->setCursor(Qt::PointingHandCursor);
this->m_button->setFont(QFont("Comic Sans MS", 14));
converLayout->addRow("Order : ", this->testline);
converLayout->addWidget(this->m_button);
this->setLayout(converLayout);
QObject::connect(m_button, SIGNAL(clicked()), this, SLOT(ClearAndGetTxt()));
}

std::string     LibQt::ClearAndGetTxt()
{
QString txt = this->testline->text();

this->usertxt = txt.toStdString();
std::cout << this->usertxt << std::endl;
this->testline->clear();
return (this->usertxt);
}

std::string     LibQt::getUsertxt()
{
return (this->usertxt);
}

а это мой .hpp

#ifndef _LIBQT_HPP_
#define _LIBQT_HPP_

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QKeyEvent>
#include <QCheckBox>
#include <QPlainTextEdit>

class   LibQt : public QWidget
{
Q_OBJECT

public:
LibQt();
~LibQt();
void manageOrder();
std::string getUsertxt();
public slots:
std::string ClearAndGetTxt();
protected:
int   size_x;
int   size_y;
QPushButton *m_button;
QLineEdit *testline;
std::string usertxt;
};

#endif /* _LIBQT_HPP_ */

5

Решение

Вам нужно переопределить метод void QWidget::keyPressEvent(QKeyEvent *event), Для вас это будет выглядеть так:

void LibQt::keyPressEvent(QKeyEvent* event)
{
if(event->key() == Qt::Key_Escape)
{
QCoreApplication::quit();
}
else
QWidget::keyPressEvent(event)
}
6

Другие решения

Я знаю, что вы решили эту проблему, и мое решение на Python, но другие люди могут найти это полезным. По сути, вы можете реализовать эту функцию как действие:

w = LibQt() # QWidget().

escape = QAction('Escape', w)
escape.setShortcut(QKeySequence('Esc'))
escape.setShortcutContext(Qt.WidgetWithChildrenShortcut) # acts as an event filter.
escape.triggered.connect(w.close)

w.addAction(escape)

Очевидно, что при удалении первой строки этот код может быть добавлен в конструктор класса.

0

По вопросам рекламы [email protected]