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