Мне вводили пульт в моем Qt
основанное применение, это - a QLineEdit
, весь Ui разработан через QtDesigner
. Это - какой-либо легкий способ способ обращаться вверх и вниз по стрелам, чтобы осуществить входную историю? 'Идут в место', только показывают returnProcessed
сигнал, никакой путь i не видит, чтобы обращаться вверх и вниз по стрелам :(
Единственным реальным преимуществом является возможность его использования в операторе switch
. Все остальные вещи, на которые способен перечисление, можно просто сделать с помощью простого класса ванили с помощью частного
конструктора, экземпляры которого, в свою очередь, объявляются как открытые статические конечные
поля рассматриваемого класса (typesafe образца). Другое преимущество перечисления, очевидно, что это делает код менее подробным, чем вы бы сделать с простым ванильным классом.
Но если я не ошибаюсь, в C++ (или это было C #?) можно использовать Последовательности
в операторе switch
. Таким образом, преимущество перечислений в Java ничтожно мало по сравнению с C++. Тем не менее, то же самое было предложено для Java 7, не уверен, что он сделает это.
Java 5 enums был создан на основе шаблона перечисления типа Джошуа Блох Эффективная Java (первая редакция), чтобы избежать подводных камней перечисления в C/C + +/C #
В основном константы int и перечисления int не являются наборными. Вы можете передать любое значение int. В C/C + + вы можете сделать это:
enum A { one, two, three };
enum B { beef, chicken, pork } b = beef;
void func(A a) { ... }
func((A)b);
К сожалению, шаблон перечисления typesafe из Effective Java имел много шаблона, не все это очевидно. Наиболее примечательным является то, что вам пришлось переопределить метод private readResolve
, чтобы остановить создание новых экземпляров Java при десериализации, что нарушило бы простую проверку ссылок (т. е. с помощью оператора = =
вместо равно ()
).
Таким образом, Java 5 enums имеют следующие преимущества по сравнению с ints:
EnumSet
и EnumMap
. Java 5 перечисляет эти преимущества по сравнению с использованием только классов:
readResolve ()
и т.д.); можно установить фильтр событий и наблюдать за событием редактирования строки в классе окон. Ниже приведен пример:
объявите метод обработчика событий в классе окна:
class MainWindow : public QMainWindow {
Q_OBJECT
...
protected:
void changeEvent(QEvent *e);
...
};
конструктор окна
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
ui->lineEdit->installEventFilter(this);
}
реализация обработчика событий:
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);
}
надеюсь, что это поможет, относительно
Вы можете подклассьте QLINEEDIT и повторно реализовать метод виртуального ключа для обработки ваших специальных клавиш.
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);
}
}
У меня была та же проблема, но я узнал на других форумах, что вам нужно setFocus
, например: [
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
ui->lineEdit->installEventFilter(this);
this->setFocus();
}
] Это работает для меня.
Ссылка: http://www.qtforum.org/article/28240/how-to-get-arrow-keys.html