2012-03-07 12 views
0

QListWidget에 QListWidgetItem의 목록이 있습니다 (Hor 스크롤 막대는 항목 수가 많을수록 많습니다). 각 QListWidgetItem에는 QPixmap이 데이터로 포함됩니다 (임의의 값으로 축소). 내 요구 사항은 QPixmap을 클릭하여 강조해야합니다 (브러쉬 폭 10의 반올림 된 사각형). 각 QListWidgetItem을 QItemDelegate에 위임합니다. 여기에 몇 가지 질문이 있습니다.QListWidget에있는 QPixmap에서 페인팅

  1. 해당 QListWidgetItem이 선택되었을 때 QPixmap의 둥근 사각형을 칠하는 방법은 무엇입니까?

  2. 위의 페인트 이벤트는 QPixmap을 클릭 할 때 발생합니다 (QListWidgetItem의 다른 부분에는 해당되지 않음). QPixmaps의 크기가 다르므로 QListWidgetItem의 QPixmaps의 위쪽과 아래쪽 부분이 비어있을 것이며 그곳을 클릭하면 ItemDelegate가 트리거됩니다. 이 선택을 제거하는 방법?

답변

0

QListWidget을 사용한 적이 없기 때문에 가능할지 모르겠습니다. 그러나 QListView 및 사용자 지정 모델과 대리자를 사용하여 작업을 수행합니다. 내 사용자 정의 내부

QAbstractListModel : 그것의 요점은과 같이가는 내 사용자 정의 내부

QVariant data(const QModelIndex &index, int role) const 
{ 
    if(index.isValid()) 
    { 
     switch(role) 
     { 
      case MyCustomRole: 
       return QVariant(*pointerToMyQPixmap); 
      break; 
... 

QStyledItemDelegate :

내보기에서
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 

... 

    // Best make DAMN sure it's not null else we will crash and burn. 
    QPixmap pix = index.data(myCustomRole).value<QPixmap>(); 
    painter->drawPixmap(1, 1, pix); 

... 

은 Qt의 모델/뷰 프레임 워크입니다 좀 절름발이지만 그들이 감각에 올 때까지, 프레임 워크에서 제공하는 내장 된 위젯의 기본 기능 이외에 다른 것을 원한다면 배워야 할 것이 있습니다. 당신이 QListWidget와 더 많은 기능을 원하는하는 경우 즉, 당신은 QListView에 공부를하고 자신의 모델을 구현하고 답장을

http://qt-project.org/doc/qt-4.8/qlistview.html#details

+0

감사보고해야합니다. ListWidget에서도 이와 비슷한 작업을했습니다. Delegate :: paint() 메서드에서 수정 된 Qpixmap을 listItem으로 페인팅하는 동안 QPixmap이 그려지는 좌표를 지정해야합니다. 제 질문은 QPixmap이 중심에 정렬되어있어 그러한 좌표를 찾는 방법입니다. option.rect(). x() 및 y()는 항목의 왼쪽 위 좌표 값을 제공합니다. 센터를 칠하는 방법이 있습니까? 또는 수동으로 계산해야합니까? –

+0

나는 당신이 뭘하는지 알아 내는데 어려움을 겪고있다 :-) 아마도 당신은 QPixmap으로하고있는 일과 더 구체적 일 수도 있고, 무엇을 위해서라도 좌표를 필요로 할 수도있다. –

+0

실제 문제를 알려주십시오. 각 listItem에는 QPixmap이 있습니다. 각 QPixmap은 가변 크기입니다. listItem을 클릭하면 해당 그림 주위에 둥근 사각형을 그려야하는 방식으로 해당 그림을 강조 표시해야합니다. 그래서 Delegate paint 메서드에서 데이터 (QPixmap)를 가져오고 그 주위에 둥근 사각형을 그립니다. 그런 다음 ListWidgetItem에서 업데이트 된 QPixmap을 가운데 정렬로 그립니다. QPixmap을 그리기 위해 QRect를 지정해야합니다. 여하튼 우리는 수동으로 중심 맞춤을위한 지오메트리를 계산할 수 있지만 더 좋은 접근 방법이 있는지 알고 싶습니다 –