На форме есть 2 lineEdit'a
. Есть на форме куча кнопок а-ля цифровая клавиатура (делаю десктоп-приложение с адаптацией под тачскрины). Нужно с этой цифровой клавиатуры вводить данные в тот lineEdit
, в котором стоит фокус.
Как можно объяснить кнопка QPushButton в каком из lineEdito'в
сейчас находится фокус?
UPD:
По совету @magrif сделал следующее:
mainwindow.h
bool eventFilter(QObject *watched, QEvent *event);
QObject * m_focused;
void digiKey(QLineEdit *l);
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
m_focused = nullptr;
/*...*/
ui->lineEdit_oPrice->installEventFilter(this);
ui->lineEdit_oAmount->installEventFilter(this);
connect(ui->pushButton_0, &QPushButton::clicked, [this]() {
if(m_focused != nullptr) {
QLineEdit* l = static_cast<QLineEdit*>(m_focused);
//do something
digiKey(l);
}
});
}
void MainWindow::digiKey(QLineEdit * l)
{
QPushButton *button = (QPushButton *)sender();
double Price;
qDebug() << "isPrice now";
Price = (l->text() + button->text()).toDouble();
l->setText(QString::number(Price));
}
В конечном счёте, при нажатии на связанную кнопку, программа падает.
Как-то так
if(ui->lineEdit1->hasFocus()) {
//some work
} else
if(ui->lineEdit2->hasFocus()) {
//some work
}
Через события
В MainWindow
(или какой там класс для агрегации lineedit'ов) объявить член QObject* m_focused;
. Переопределить виртуальную член-функцию eventFilter(QObject *watched, QEvent *event)
таким образом:
bool
MainWindow::
eventFilter(QObject *watched, QEvent *event)
{
if(event->type() == QEvent::FocusIn) {
m_focused = watched;
}
return false;
}
И в конструкторе установить этот фильтр только на lineEdit'ы, а m_focused
определить как nullptr
:
ui->lineEdit1->installEventFilter(this);
ui->lineEdit2->installEventFilter(this);
Теперь при получении фокуса указатель на текущий lineEdit сохраняется в m_focused
. Далее работать как угодно с этим объектом по типу:
connect(ui->key_X, &QPushButton::clicked, [this]() {
if(m_focused != nullptr) {
QLineEdit* l = static_cast<QLineEdit*>(m_focused);
//do something
}
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите пожалуйста, как мне сделать ниспадающий блок на подобие аккордеонаПытаюсь интегрировать вот такой скрипт:
Есть textarea id="textarea-id"Используется текстовый редактор CodeMirror
В каком случае мой класс должен имплементировать интерфейс IDisposable? Подскажите правильную имплементациюЧто такое неуправляемые ресурсы,...