Я пишу небольшое графическое приложение с QT4.5 в QtCreator.
Главный экран приложения содержит QTreeView с двумя столбцами, первый - текст, второй - группа значков. Эти значки представляют последние несколько состояний элемента, отображаемого в строке.
Я не уверен, что лучший способ сделать это. В настоящее время я реализовал это путем генерации QPixmap метода data()
модели.
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole || role == Qt::EditRole) {
switch(index.column()) {
case 0:
return item_.at(index.row()).title();
}
}
if (role == Qt::DecorationRole) {
switch(index.column()) {
case 1:
return makeImage(item_.add(index.row()).lastStates());
}
}
return QVariant();
}
QVariant MyModel::makeImage(const QList<MyState> &states) const
{
const int IconSize = 22;
QPixmap image(IconSize * states.size(), IconSize);
QPainter painter(&image);
painter.fillRect(0, 0, IconSize * count, IconSize, Qt::transparent);
for (int i = 0; i < states.size(); ++i) {
QIcon * icon = stateIcon(state.at(i));
icon->paint(&painter, IconSize * i, 0, IconSize, IconSize);
}
return image;
}
Это работает, но для некоторых небольших проблем фон, который должен быть прозрачным, полон случайного шума, даже заполнение его прозрачным цветом не исправляет это.
Во-вторых, это не кажется очень эффективным, я генерирую новое изображение каждый раз, когда это вызывается, я должен не просто рисовать значки на виджете для ячейки?
Каков наилучший способ отображения нескольких значков в одной ячейке?