![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Флинт |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 1.10.2011 Пользователь №: 2919 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вот собственно скриншот макета:
![]() Данные берутся из базы данных, за заголовок, тэги, дату и пр. отвечает своя ячейка в базе данных. Модель пока сделал, наследуясь от QSqlQueryModel, для представления мне кажется лучше всего подойдет ListView, но как заполнить один его элемент данными из нескольких ячеек таблицы? И как добиться нужного форматирования этих данных? Можно ли сделать это делегатом, или нужно писать свое представление? Направьте в нужную сторону пожалуйста ![]() |
|
|
RazrFalcon |
![]()
Сообщение
#2
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Я бы создал класс QWidget. В нем бы расположил все что нужно для одной ячейки. Потом бы брал данные из БД и задавал значение элементов QWidget. А потом добавлял бы готовый QWidget в ячейку QListWidget.
Вот пример того, что получилось у меня: http://kde-apps.org/CONTENT/content-pre2/144956-2.png |
|
|
Флинт |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 1.10.2011 Пользователь №: 2919 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Это идея, спасибо.
|
|
|
Denis.Rassvetniy |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 22.9.2011 Пользователь №: 2899 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Модель пока сделал, наследуясь от QSqlQueryModel, для представления мне кажется лучше всего подойдет ListView, но как заполнить один его элемент данными из нескольких ячеек таблицы? И как добиться нужного форматирования этих данных? Напишите свой делегат (наследуйте от QStyledItemDelegate), переопределите в нём функцию paint(). |
|
|
vankleef |
![]()
Сообщение
#5
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 21.10.2010 Пользователь №: 2134 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
Модель пока сделал, наследуясь от QSqlQueryModel, для представления мне кажется лучше всего подойдет ListView, но как заполнить один его элемент данными из нескольких ячеек таблицы? И как добиться нужного форматирования этих данных? Напишите свой делегат (наследуйте от QStyledItemDelegate), переопределите в нём функцию paint(). да, на мой взгляд создание своего делегата тут как раз уместно, т.к. используешь базы данных |
|
|
Флинт |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 1.10.2011 Пользователь №: 2919 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Возник следующий вопрос. Делегат %
Возник следующий вопрос. Делегат свой я сделал и даже добился нужного внешнего вида, проблемы начинаются, когда в средней строчке, где планируется размещать комментарии появляется слишком много текста, а соседние строки текста ничего не знают о размере друг друга и ничего не масштабируется, примерно так: ![]() Размещаю элементы подобным образом в методе paint делегата:
Метод sizeHint пока такой:
Куда копать? |
|
|
Алексей1153 |
![]()
Сообщение
#7
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
нужно как-то передавать каждому элементу его разрешённую прямоугольную область, чтобы он за неё не выходил
посмотри, есть ли у метода drawText флага, который делает клиппинг по прямоугольнику а чтобы ничего не обрезалось, эти прямоугольники надо так подгонять Сообщение отредактировал Алексей1153 - 11.11.2011, 11:09 |
|
|
wiz29 |
![]()
Сообщение
#8
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
попробуй использовать QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const
|
|
|
Флинт |
![]()
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 1.10.2011 Пользователь №: 2919 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
попробуй использовать QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const Добавляет три точки, где текст обрывается, не знаю чем это может помочь ![]() Пробывал через QFontMetrics узнавать высоту каждой строчки, но не понял как вычислить высоту абзаца. |
|
|
Sokoloff |
![]()
Сообщение
#10
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: ![]() ![]() ![]() |
попробуй использовать QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const Добавляет три точки, где текст обрывается, не знаю чем это может помочь ![]() Пробывал через QFontMetrics узнавать высоту каждой строчки, но не понял как вычислить высоту абзаца. Надо установить свойство uniformRowHeights в false. Перекрыть SizeHint. Для получения размера текста можешь использовать параметр boundingRect в QPainter::drawText. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 11:08 |