Russian Qt Forum
Сентябрь 27, 2024, 12:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Редактирование, фокус, QTableView, Отменить окочание редактирования ячейки  (Прочитано 3007 раз)
BuRn
Гость
« : Март 26, 2012, 19:43 »

Здравствуйте!
Имеется следующий вопрос. Есть свой виджет, наследованный от 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 и запретить прерывать редактирование при потере фокуса ввода? Либо, возможно, есть более элегантное решение?
Записан
BuRn
Гость
« Ответ #1 : Март 26, 2012, 20:33 »

Решение: необходимо унаследоваться от QTableView и перегрузить метод.

Код:
void QAbstractItemView::closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint ) [virtual protected slot]

После чего QDialog перестанет пропадать, а при нажатии кнопки Закрыть в диалоге можно закрывать редактирование.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.113 секунд. Запросов: 20.