Поиск:

Ответ в темуСоздание новой темы Создание опроса
> фильтр ввода в QTableWidgetItem, фильтр ввода в QTableWidgetItem 
:(
    Опции темы
hawk3500
Дата 12.1.2012, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Здравствуйте.
Возникла ситуация в которой мне надо отлавливать вводимые с клавиатуры данные в любую из ячеек таблицы QTableWidget.
Никакой ни фильтр не установить ни сигнал соединить.
Если сказал не ясно то опишу как пример:
есть QTableWidget и нужно использовать его как основу для HEX редактора, т.е. количество вводимых символов в ячейку не превышает двух и они соответствуют HEX коду.
Заранее благодарен.
С уважением,
HAWK3500.
--------------------
воин dzen'a
PM MAIL   Вверх
spyswamp
Дата 12.1.2012, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



Обрати свой взор в сторону делегатов (в документации искать QItemDelegate и т.п.). Создавай там любой editor и ограничивай его как хочешь.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
_GRIN_
Дата 12.1.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



и в createEditor() можно возвращать просто  QLineEdit - ну а фильтр ему через QValidator задать =)


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
hawk3500
Дата 12.1.2012, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



т.е. если я Вас правильно понял то Вы предлагаете в каждую ячейку помещать какойто другой ,отличный от того что по умолчанию виджет(например QLineEdit)?
--------------------
воин dzen'a
PM MAIL   Вверх
spyswamp
Дата 12.1.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



Ага. Это делается по уму именно так.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
_GRIN_
Дата 13.1.2012, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



hawk3500, не совсем верно - ты задаёшь делегат 1 раз для всего вью (QTableWidget - наследник от QTableView - а он наследник от QAbstractItemView) - а уж делегат для каждого айтема при соответствующем действии (например двойной клик по ячейке) создаст редактор (будет вызвана функция createEditor() - ты её переопределяешь в своей имплементации делегата - и возвращаешь например QLineEdit с соответствующим QValidator).


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
hawk3500
Дата 13.1.2012, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



_GRIN_  спасибо.
Сегодня попробую.
--------------------
воин dzen'a
PM MAIL   Вверх
hawk3500
Дата 13.1.2012, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Я сделал вот так:
Код

#include <QItemDelegate>
#include <QtGui/QMainWindow>
#include <QtCore>
#include <QtGui>
class CChoicePathDelegate : public QItemDelegate
{
     QWidget * createEditor(QWidget *parent,
        const QStyleOptionViewItem & /* option */,
        const QModelIndex &index) const;
    void setEditorData(QWidget *editor,
        const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model,
        const QModelIndex &index) const;
    private slots:
        void TesttextEdited(const QString &UU);
};



QWidget * CChoicePathDelegate::createEditor(QWidget *parent,
                       const QStyleOptionViewItem & /* option */,
                       const QModelIndex &index) const
{
    
    QLineEdit *LineEd = new QLineEdit(parent);
    LineEd->setInputMask("HHHH");
    bool K=connect(LineEd, SIGNAL(textEdited(const QString)), this, SLOT(TesttextEdited(const QString)));
    return LineEd;
    
}
void CChoicePathDelegate::setEditorData(QWidget *editor,
                   const QModelIndex &index) const
{
    QLineEdit *LineEd = qobject_cast<QLineEdit *>(editor);
    if (!LineEd)return;
}
void CChoicePathDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                  const QModelIndex &index) const
{
    QLineEdit *LineEd = qobject_cast<QLineEdit *>(editor);
    if (!LineEd)return;
    model->setData(index,LineEd->text());
    return;
}
void CChoicePathDelegate::TesttextEdited(const QString &UU)
{
    return;
}

возможно вопрос глупый , но как в TesttextEdited получить QTableWidget родителя и допустим переключится на другую ячейку?

Это сообщение отредактировал(а) hawk3500 - 13.1.2012, 10:13
--------------------
воин dzen'a
PM MAIL   Вверх
hawk3500
Дата 13.1.2012, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Я так понял что createEditor вызывается каждый раз при активации поля....но если в этом поле уже были данные......как их отобразить в новообразовавшийся QLineEdit?

Добавлено через 10 минут и 6 секунд
С последним разобрался....а вот как из делегата обращаться к  QTableWidget так и не понял smile 
--------------------
воин dzen'a
PM MAIL   Вверх
_GRIN_
Дата 13.1.2012, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Цитата(hawk3500 @  13.1.2012,  09:02 Найти цитируемый пост)
а вот как из делегата обращаться к  QTableWidget так и не понял


ну проще всего явно передавать делегату указатель на вью (в конструкторе, или в отдельной функции),
т.к. при задании делегат для вью - вью не становится parent-ом делегата
Код

 QAbstractItemView does not take ownership of delegate.

Так что кастить parent() к вью - не стоит (даже если на самом деле ты в конкнструкторе делега вью указал как parent).
А другого апи для данных целей кьют не предоставляет - думаю не без причины =)

Добавлено через 5 минут и 12 секунд
Кстати, рискну предположить, что тебе не нужен указатель на QTableWidget - я так понимаю, что ты хочешь в таблице данные изменить.
Если я прав, то для этого используй QAbstractItemDelegate::setModelData().

P.S.
Вообще лучше сразу смотреть в сторону model+view - а не в сторону виджетов - говорю по собственному опыту.

Это сообщение отредактировал(а) _GRIN_ - 13.1.2012, 13:57


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
hawk3500
Дата 13.1.2012, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Спасибо.
Сделал как Вы рекомендовали.
Всё замечательно работает)))
--------------------
воин dzen'a
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.