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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: О QTableWidget  (Прочитано 10890 раз)
qtист
Гость
« : Март 04, 2009, 18:10 »

Перехожу потихоньку с MFC на QT - тяжко Плачущий ,
может и стану кютеистом.

Вопрос такой:
cоздал форму с QTableWidget.
Надо бы сделать ввод ,например,только цифр и запятой.
Получается или любые символы,или только цифры.


Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Март 04, 2009, 18:25 »

Нужно создать свой делегат на основе QItemDelegate и установить его для таблицы при помощи setItemDelegate(...).

См .пример QTDIR/examples/itemviews/spinboxdelegate/

Тебе нужно переопределить один метод - createEditor, создать редактор ячеек (QLineEdit), установить нужную маску ввода:

Код
C++ (Qt)
QWidget *YourDelegate::createEditor(QWidget *parent,
   const QStyleOptionViewItem &/* option */,
   const QModelIndex &/* index */) const
{
   QLineEdit *editor = new QLineEdit(parent);
   editor->setInputMask("bla-bla-bla");
   return editor;
}
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
KADABRA
Гость
« Ответ #2 : Март 04, 2009, 21:21 »

... установить нужную маску ввода:

Код
C++ (Qt)
...
   editor->setInputMask("bla-bla-bla");
...
Правильнее validator:
Код
C++ (Qt)
editor->setValidator(new QDoubleValidator(editor));
Записан
qtист
Гость
« Ответ #3 : Март 05, 2009, 11:07 »

Получилось,всем +1. Смеющийся

а вот ещё один маленький вопрос по QTabWidget:

как убрать выделение элемента из таблицы,когда таблица теряет фокус?
Записан
spirit
Гость
« Ответ #4 : Март 05, 2009, 11:17 »

см. void QAbstractItemView::clearSelection () & QFocusEvent.
Записан
Maquefel
Гость
« Ответ #5 : Апрель 16, 2009, 11:19 »

Не получаеться - пустые ячейки вставляет  Плачущий и редактировать не даёт

Код:
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);
    ui->deformationInput->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->deformationInput,
            SIGNAL(customContextMenuRequested(const QPoint &)),
            this,
            SLOT(contexMenu(const QPoint &)));
    tabledelegate tbldelegate;
    ui->deformationInput->setItemDelegate(&tbldelegate);
    createActions();
    createMenus();
}

tableitemdelegate.h
Цитировать
class tabledelegate : public QItemDelegate
{
public:
    tabledelegate(QObject *parent = 0);
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const;
};

tableitemdelegate.cpp
Цитировать
tabledelegate::tabledelegate(QObject *parent)
    : QItemDelegate(parent)
{
}

QWidget *tabledelegate::createEditor(QWidget *parent,    const QStyleOptionViewItem &/* option */,    const QModelIndex &/* index */) const
{
    QLineEdit *editor = new QLineEdit(parent);
    editor->setValidator(new QDoubleValidator(editor));
    editor->setEnabled(true);
    return editor;
}
« Последнее редактирование: Апрель 16, 2009, 11:22 от Maquefel » Записан
spirit
Гость
« Ответ #6 : Апрель 16, 2009, 11:22 »

попробуй вместо
Код
C++ (Qt)
...
tabledelegate tbldelegate;
ui->deformationInput->setItemDelegate(&tbldelegate);
...
 
вот так сделать
Код
C++ (Qt)
...
ui->deformationInput->setItemDelegate(new tabledelegate);
...
 
Записан
Maquefel
Гость
« Ответ #7 : Апрель 16, 2009, 11:24 »

Спасибо большое - работает, а в чем дело - если вкратце?
Записан
spirit
Гость
« Ответ #8 : Апрель 16, 2009, 11:26 »

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


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