Название: Ограничение количества символов в QTableView [РЕШЕНО] Отправлено: LEO от Декабрь 26, 2012, 09:33 всем привет, столкнулся с проблемой ограничения вводимого текста в колонках таблицы.
Использую базу SQLite отображаю с помощью QTableView, в базе прописываю к примеру VARCHAR(5), однако во вьюхе прописываю 10 символов, смотрю в базу там 10 и отображает, как я понял SQLite не обрезает вводимые данные, как решить проблему, кто сталкивался может быть с подобным, есть ли стандартные методы ограничения? Название: Re: Ограничение количества символов в QTableView Отправлено: Termit от Декабрь 26, 2012, 10:51 sqlite не проверяет размеры и типы полей, в поле int можно запросто записать varchar. Но это не баг это фича (с) :)
Можно погуглить на предмет "sqlite3 типы данных" и можно будет найти ответ на вопрос почему так. Название: Re: Ограничение количества символов в QTableView Отправлено: Termit от Декабрь 26, 2012, 10:54 А проверку в таком случае стоит делать в самом приложении, т.к. при работе например с тем же postgres при попытке записать в varchar(5) строку длиной 10 символов получим ошибку.
В редактируемых моделях не проверял, пишу про случай с обычным insert, но думаю ошибка вставки данных будет все равно. Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Декабрь 26, 2012, 11:20 С SQLIte вроде разобрался и понял что надо именно в приложении делать ограничение, поэтому и обратился сюда, но каким образом ограничить? Есть ли стандартные ограничения во вьюхах по этому поводу?
Название: Re: Ограничение количества символов в QTableView Отправлено: Termit от Декабрь 26, 2012, 11:36 С SQLIte вроде разобрался и понял что надо именно в приложении делать ограничение, поэтому и обратился сюда, но каким образом ограничить? Есть ли стандартные ограничения во вьюхах по этому поводу? Как вариант проверять и отсекать лишнее прямо в модели в setData. Название: Re: Ограничение количества символов в QTableView Отправлено: Termit от Декабрь 26, 2012, 11:45 С SQLIte вроде разобрался и понял что надо именно в приложении делать ограничение, поэтому и обратился сюда, но каким образом ограничить? Есть ли стандартные ограничения во вьюхах по этому поводу? Или присмотреться к делегатам. Там можно все сделать более красиво.Название: Re: Ограничение количества символов в QTableView Отправлено: panAlexey от Декабрь 27, 2012, 10:09 С SQLIte вроде разобрался и понял что надо именно в приложении делать ограничение, поэтому и обратился сюда, но каким образом ограничить? Есть ли стандартные ограничения во вьюхах по этому поводу? Как вариант проверять и отсекать лишнее прямо в модели в setData. Отсекать надо во время ввода. Название: Re: Ограничение количества символов в QTableView Отправлено: Termit от Декабрь 27, 2012, 10:14 Я бы так не делал. Отсекать надо во время ввода. И я бы так не делал :) Но это тоже вариант как ни крути. Название: Re: Ограничение количества символов в QTableView Отправлено: lit-uriy от Декабрь 27, 2012, 10:35 >присмотреться к делегатам. Там можно все сделать более красиво.
+1 Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Декабрь 27, 2012, 12:28 Сделал делегатом и тут возникли проблемы...
Как делал делегат: .h Код: #ifndef DELEGATEVVODA_H Код: #include "delegatevvoda.h" Применял делегат вот так: ui->tableView->setItemDelegate(new delegatevvoda(this)); к таблице применен setStyleSheet: Код: QString v = "QTableView::item::focus{\n"\ После использования делегата стили пропали, раньше ячейка на которой был фокус подсвечивалась желтым, сейчас не подсвечивает... и еще до применения делегата при вводе в ячейку строка растягивалась по вводимому тексту и был виден весь текст введенный , сейчас такого нету... не могу разобраться... ??? ??? ??? Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Январь 01, 2013, 22:23 Нужна помощь ??? ??? ???
Название: Re: Ограничение количества символов в QTableView Отправлено: Old от Январь 01, 2013, 22:42 Нужна помощь ??? ??? ??? Наследуйся не от QItemDelegate, а от QStyledItemDelegate.Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Январь 03, 2013, 10:16 Действительно отнаследовался от QStyledItemDelegate и появился фокус, но с растяжением строки проблема так и осталась...
добавил Код: void delegatevvoda::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const вот не понятно где едитору сказать чтоб он Lineedit рисовал по содержимому текста, по сути необходимо динамическое изменение Lineedita который по сути используется в качестве ячейки пробовал такое: Код: LineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); что еще можно придумать по этому поводу? Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Январь 11, 2013, 10:21 Перепробовал массу вариантов, теперь решил делать так и столкнулся с проблемой:
.h Код:
.cpp Код: delegatevvoda::delegatevvoda(QObject *parent) : в общем пытаюсь отловить изменения с помощью сигнала textChanged и сделать изменение размера ячейки в соответствии с размером текста, однако при попытке ввода в ячейку все падает и вылетает ошибка памяти, не могу разобраться что не так, думаю что проблема в связи сигнала со слотом, однако как ее исправить не могу понять. Помогите пожалуйста разобраться в проблеме. Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Февраль 01, 2013, 16:24 Может есть у кого какие идеи по этому поводу, походу перепробовал уже все что можно ???
Название: Re: Ограничение количества символов в QTableView Отправлено: Bepec от Февраль 01, 2013, 17:58 Вот если вы сведёте всю простыню темы в 2-3 предложения и спросите, я постараюсь ответить. А так вникать особо неохота :)
Название: Re: Ограничение количества символов в QTableView Отправлено: panAlexey от Февраль 02, 2013, 12:17 Может есть у кого какие идеи по этому поводу, походу перепробовал уже все что можно ??? Напиши свой грид. В любом случае меня не удовлетворяет QTableView.Куда более интересное решение ТабличноеПоле 1С++. Но оно к сожалению на MFC. Раздумываю над портированием. Название: Re: Ограничение количества символов в QTableView Отправлено: VPS от Февраль 02, 2013, 19:57 в общем пытаюсь отловить изменения с помощью сигнала textChanged и сделать изменение размера ячейки в соответствии с размером текста, однако при попытке ввода в ячейку все падает и вылетает ошибка памяти, не могу разобраться что не так, думаю что проблема в связи сигнала со слотом, однако как ее исправить не могу понять. Помогите пожалуйста разобраться в проблеме. Программа вылетает, так как Вы пытаетесь в методе "resizeLineEditToContents()" обратиться к несуществующему объекту, при обращении к переменной "LineEdit"! Это в методах, определенных в базовом классе данный объект Вы получаете из "editor", а в том методе его нет.... П.С.: немного изменил Ваш пример, чтобы заработало (во вложении)... Название: Re: Ограничение количества символов в QTableView Отправлено: LEO от Февраль 04, 2013, 08:34 огромное спасибо, работает как надо
|