Здравствуйте!
Имеется следующий вопрос. Есть свой виджет, наследованный от QLineEdit. Виджет представляет из себя собственно QLineEdit над которым появляется калькулятор при получении фокуса ввода. При нажатии на кнопки калькулятора, цифры вводятся в QLineEdit. Калькулятор унаследован от QDialog. Калькулятор немодальный, но всегда находится поверх QMainWindow.
class CafeLineEdit : public QLineEdit {
Q_OBJECT
public:
CafeLineEdit(QWidget *parent = 0);
void refreshCalcPos();
~CafeLineEdit();
protected:
void mousePressEvent(QMouseEvent *);
void resizeEvent(QResizeEvent *) { refreshCalcPos(); }
private slots:
void calculatorClicked();
private:
Ui::CalculatorWidget *calculator;
QDialog *calculatorDialog;
QValidator *validator;
};
Далее. Есть QTableView в котором данный виджет является виджетом редактирования(отдается делегатом). Но отредактировать значение в таблице с использованием данного виджета не получается из-за того, что при создании виджета, калькулятор автоматически получает фокус
void CafeLineEdit::mousePressEvent(QMouseEvent *) {
refreshCalcPos();
calculatorDialog->show();
}
, а при потере фокуса ввода QTableView считает, что редактирование закончено и закрывает виджет редактирования. Получается, что калькулятор создается и тут же закрывается. Можно ли как-то решить эту проблему? Можно ли унаследоваться от QTableView и запретить прерывать редактирование при потере фокуса ввода? Либо, возможно, есть более элегантное решение?