QStyledItemDelegate를 사용자 지정 항목 그리기에 사용할 수 있습니다. QModelIndex에는 "항목"레코드 필드를 가져 오는 데 사용할 수있는 모델 개체에 대한 참조가 있습니다. 또한 더 많은 데이터와 단일 데이터를 표시해야하는 경우 모델의 sizeHint 메서드를 다시 정의하여 항목 크기를 늘려야합니다. 그다음은 다소 사소한 것입니다. 아래의 예를 들어 당신을 작동 할 경우
은
Pls는, 참조 :
class ListViewDelegate : public QStyledItemDelegate
{
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QStyleOptionViewItemV4 opt = option;
initStyleOption(&opt, index);
QString line0 = index.model()->data(index.model()->index(index.row(), 1)).toString();
QString line1 = index.model()->data(index.model()->index(index.row(), 2)).toString();
// draw correct background
opt.text = "";
QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
QRect rect = opt.rect;
QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;
if (cg == QPalette::Normal && !(opt.state & QStyle::State_Active))
cg = QPalette::Inactive;
// set pen color
if (opt.state & QStyle::State_Selected)
painter->setPen(opt.palette.color(cg, QPalette::HighlightedText));
else
painter->setPen(opt.palette.color(cg, QPalette::Text));
// draw 2 lines of text
painter->drawText(QRect(rect.left(), rect.top(), rect.width(), rect.height()/2),
opt.displayAlignment, line0);
painter->drawText(QRect(rect.left(), rect.top()+rect.height()/2, rect.width(), rect.height()/2),
opt.displayAlignment, line1);
}
QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const
{
QSize result = QStyledItemDelegate::sizeHint(option, index);
result.setHeight(result.height()*2);
return result;
}
};
테스트 데이터베이스 세트가 정의된다 :
QSqlError initDb()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open())
return db.lastError();
QStringList tables = db.tables();
if (tables.contains("test", Qt::CaseInsensitive))
return QSqlError();
QSqlQuery q;
if (!q.exec(QLatin1String("create table entries(id integer primary key, first_line varchar, second_line varchar)")))
return q.lastError();
q.exec("insert into entries(id, first_line, second_line) values(0, 'first line 0', 'second line 0')");
q.exec("insert into entries(id, first_line, second_line) values(1, 'first line 1', 'second line 1')");
q.exec("insert into entries(id, first_line, second_line) values(2, 'first line 2', 'second line 2')");
return QSqlError();
}
모델 및 목록보기 정의 :
initDb();
QSqlQueryModel *sqlModel = new QSqlQueryModel();
sqlModel->setQuery("SELECT * FROM entries");
ui->listView->setModel(sqlModel);
ui->listView->setItemDelegate(new ListViewDelegate());
희망을 도움, 안부
감사합니다. 에스! 셀에 QIcon을 그리는 방법에 대한 간단한 예를 들어 줄 수 있습니까? – gmpi
아이콘에 대한 pixmap을 만듭니다. icon.pixmap (...); painter-> drawPixmap (pos, pixmap)을 사용하여 그것을 그린다. –