Вот собственно скриншот макета:
Данные берутся из базы данных, за заголовок, тэги, дату и пр. отвечает своя ячейка в базе данных.
Модель пока сделал, наследуясь от QSqlQueryModel, для представления мне кажется лучше всего подойдет ListView, но как заполнить один его элемент данными из нескольких ячеек таблицы? И как добиться нужного форматирования этих данных? Можно ли сделать это делегатом, или нужно писать свое представление? Направьте в нужную сторону пожалуйста
Я бы создал класс QWidget. В нем бы расположил все что нужно для одной ячейки. Потом бы брал данные из БД и задавал значение элементов QWidget. А потом добавлял бы готовый QWidget в ячейку QListWidget.
Вот пример того, что получилось у меня:
http://kde-apps.org/CONTENT/content-pre2/144956-2.png
Это идея, спасибо.
Возник следующий вопрос. Делегат %
Возник следующий вопрос. Делегат свой я сделал и даже добился нужного внешнего вида, проблемы начинаются, когда в средней строчке, где планируется размещать комментарии появляется слишком много текста, а соседние строки текста ничего не знают о размере друг друга и ничего не масштабируется, примерно так:
Размещаю элементы подобным образом в методе paint делегата:
painter->setFont(QFont("Arial", 10));
painter->drawText(QRect(rect.left()+25, rect.top()+rect.height()/4, rect.width(), rect.height()/2),
Qt::TextWordWrap, comment);
painter->setFont(QFont("Arial", 12));
painter->setPen(Qt::gray);
painter->drawText(QRect(rect.left()+25, rect.top()+rect.height()/2, rect.width(), rect.height()/2),
opt.displayAlignment, "Метки: "+ tag);
painter->setPen(QColor(80,0,180));
painter->drawText(QRect(rect.left()+rect.width()/2, rect.top()+rect.height()/2, rect.width(), rect.height()/2),
opt.displayAlignment, date.toString("dd.MM.yyyy"));
QSize SfDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QSize result = QStyledItemDelegate::sizeHint(option, index);
result.setHeight(result.height()*5);
return result;
}
нужно как-то передавать каждому элементу его разрешённую прямоугольную область, чтобы он за неё не выходил
посмотри, есть ли у метода drawText флага, который делает клиппинг по прямоугольнику
а чтобы ничего не обрезалось, эти прямоугольники надо так подгонять
попробуй использовать QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const
boudingRect() помог все нормально вычислить и отмасштабировать, спасибо. Осталось разобраться как сделать теги (которые подчеркнуты) нажимабельными по типу ссылки.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)