2009-12-06 2 views
2

QtCreator에 QT4.5가 포함 된 작은 GUI 응용 프로그램을 작성하고 있습니다.QTableView의 단일 셀에 여러 아이콘 표시

응용 프로그램의 기본 화면에는 두 개의 열이있는 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; 
} 

이 작동하지만 몇 가지 작은 문제, 투명해야한다 배경은 심지어 그것을 해결되지 않는 투명한 색상이 작성, 랜덤 노이즈 가득합니다.

두 번째로 매우 효율적으로 보이지 않습니다. 새 이미지를 생성 할 때마다이 아이콘을 위젯에 그려야하나요?

단일 셀에 여러 아이콘을 표시하는 가장 좋은 방법은 무엇입니까?

답변

6

모든 그림을 배치 할 수있는 hbox를 기반으로 사용자 지정 대리자를 만들 것입니다. Qt Documentationdelegates을보고 약 model view programming입니다.

+0

감사합니다. 유일한 문제는 새 열을 올바르게 선택하는 방법입니다. 선택 배경색을 표시 할 수 있지만 다른 열이 3D로 반올림되어 있으면 평면으로 보입니다. 운이 없다면 다른 질문을 추가 할 것입니다. – iain

관련 문제