QTableWidget: разрешены только цифры

Есть ли способ запретить какие-либо символы, кроме чисел (0-9) в QTableWidget? Для QLineEdits я использую валидатор RegEx, но это не доступно для QTableWidgets. Я думал о вставке QLineEdits как CellWidgets в таблицу, но затем мне пришлось переписать чрезвычайно большое количество функций в моем коде. Итак, есть ли другой (прямой) способ сделать это?

1 ответ

Я бы предложил использовать делегат элемента для вашего виджета таблицы для обработки возможного пользовательского ввода. Ниже приведено упрощенное решение.

Реализация делегата пункта:

class Delegate : public QItemDelegate
{
public:
    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem & option,
                      const QModelIndex & index) const
    {
        QLineEdit *lineEdit = new QLineEdit(parent);
        // Set validator
        QIntValidator *validator = new QIntValidator(0, 9, lineEdit);
        lineEdit->setValidator(validator);
        return lineEdit;
    }
};

Реализация простого виджета таблицы с делегатом пользовательского элемента:

QTableWidget tw;
tw.setItemDelegate(new Delegate);
// Add table cells...
tw.show();
Другие вопросы по тегам