2016-11-21 6 views
0

QAbstractTableModel을 서브 클래 싱했으며 data() 함수에서 각 행의 마지막 열에 이미지를 표시하고 마우스를 올리면 툴팁이 표시됩니다.한 행에서 다른 행으로 이동할 때 툴팁이 업데이트되지 않습니다.

QVariant MyTableModel::data(const QModelIndex& index, int role) const 
{ 
if (!index.isValid()) 
    return QVariant(); 

if (role == Qt::DisplayRole) 
{ 
    switch (index.column()) 
    { 
    // few cases 
    default: 
     return QVariant(); 
    } 
} 
else if (role == Qt::CheckStateRole && index.column() == 0) 
{ 
    int state= tableData.at(index.row()).state; 
    if (state) 
     return Qt::Checked; 
    else 
     return Qt::Unchecked; 
} 
else if (role == Qt::DecorationRole && index.column() == 7 && index.row() > 1) 
{ 
    QPixmap pixMap(fileName); 
    return pixMap; 
} 
else if (role == Qt::ToolTipRole && index.column() == 7 && index.row() > 1) 
{ 
    return QString("Delete"); 
} 
else 
    return QVariant(); 
} 

도구 설명 텍스트는 각 행에 잘 표시되지만 난 그냥 (또는 아래에있는 행) 아래에 또 다른 마지막 열에 행의 마지막 열에서 커서를 이동할 때 툴팁은 상단 행에 남아 있습니다.

다른 행의 마지막 열로 이동하기 전에 커서를 다른 셀로 이동하면이 문제가 지속되지 않습니다. 도움 주셔서 감사합니다.

+0

전체 방법입니까? 아니면 마지막으로 다른 것이 있습니까? 테이블 행의 일부 화면을 공유하여 경험 한 툴팁 효과를 표시 할 수 있습니까? modelCount가 반환하는 모델은 무엇입니까? – Dusteh

+0

그래, 내가 제거하고 코멘트를 추가 한 몇 가지 경우를 제외하고는 전체 방법입니다 // 거의 사례가 없습니다. model columnCount는 8 개의 열이 있고 마지막 열에 삭제 버튼이 있으므로 8을 반환합니다. 내 UI의 거친 모형을 찾으십시오. https://imagebin.ca/v/32xi2VQ3ShBW – wazza

+0

문제를 조사한 후 간단한 예제를 통해 문제를 재현 해 보았습니다. 자세한 정보는 답을 확인하십시오. – Dusteh

답변

1

보기의 다른 항목에 대해 도구 설명으로 표시되는 데이터가 동일하면 도구 설명 위치가 조정되지 않습니다. 디자인 기능이나 버그인지 확실하지 않은 Qt 소스를 조사해야합니다.

그래도 쉽게 해결할 수 있습니다. Qt는 문서에서는 이러한 정보를 찾을 수 있습니다 : 당신이 항목을보기에서 툴팁을 표시 할 경우 모델/뷰 아키텍처 항목의 도구 팁을 설정하는 기능을 제공

참고; 예 : QTableWidgetItem :: setToolTip() 함수. 그러나 항목보기에서 사용자 지정 도구 설명을 제공하려는 경우 QAbstractItemView :: viewportEvent() 함수에서 도움말 이벤트를 가로 채어 직접 처리해야합니다.

따라서 하위 클래스를 만들고 viewportEvent 메서드를 재정의하면 문제가 해결됩니다.

+0

정보를 제공해 주셔서 감사합니다. 현재 QTableView를 사용하고 있습니다. 내 이해 당, QTableView 대신 QAbstractItemView 서브 클래 싱 클래스를 작성하고 그것을 사용해야하며 내 자신의 viewportEvent() 구현해야하며이 이벤트에서 필요하지 않습니다. 나는 바른 길을 가고 있는가? – wazza

+1

이것이 유일한 것이면 QTableView가 QAbstractItemView에서 상속되므로 QTableView를 서브 클래 싱하는 것으로 충분할 것입니다. – Dusteh