나는 두통이 심하다.
다음을 고려해 보겠습니다. QStyledItemDelegate에서 파생 된 사용자 지정 대리자가있는 QListView가 있습니다.
위임자의 paint()
이벤트에서 나는 tableview에서 내가 render()
인 사용자 정의 위젯을 사용합니다. 단지 statick 렌더링이고 상호 작용없이 무언가를 보여줄 필요가 있기 때문에 괜찮습니다.
내 맞춤 위젯에는 세로 레이아웃에 포함 된 QTableWidget과 대리인의 sizehint()
에 데이터로 채울 수있는 다른 레이블이 포함되어 있습니다. 그런 다음이 기술로 사용자 정의 위젯의 레이아웃을 강제 업데이트합니다 : Qt: How to force a hidden widget to calculate its layout? - forceUpdate()
코드를 참조하십시오.
한 가지를 제외한 모든 것이 정말 멋지게 보입니다. 내 맞춤 위젯의 tablewidget이 필요할 때 (내가 행을 추가 할 때) 세로로 커지는 것처럼 보이지만 행이 렌더링되지 않습니다 !!! 수축은 괜찮지 만, 커스텀 위젯의 매우 큰 높이를 어떻게 든 설정하면 문제는 해결되지만 우아하지 않고 단지 문제를보고합니다.
방금 렌더링되었으므로 대화 형이 아니기 때문에 스크롤바가 필요 없지만 QTableWidget을 축소/확대하여 추가 된 데이터를 표시해야합니다. 그 이상도 이하도 아닌.
사용자 정의 위젯의 GUI는 디자이너와 함께 이루어지며 모든 것이 동적으로 확장되고 축소되도록 설정됩니다. 캐치 어딨어? 그런 행동을 본 사람이 있습니까? 그렇다면 마법 매개 변수 조합은 무엇입니까? 눈을
일부 코드 : 어떤 도움을 크게 감상 할 수
Qt : 델리게이트 페인트 이벤트에서 렌더링 할 때 QTablewidget을 늘리는 방법?
QSize ResultsRunDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
// updating custom widget's data
item_widget->UpdateDisplay(index.row()+1);
forceUpdate(item_widget); //updating the layout
return item_widget->sizeHint(); }
void ResultsRunDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QPaintDevice* originalPaintDev = painter->device();
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
painter->end();
forceUpdate(item_widget);
item_widget->render(painter->device(), QPoint(option.rect.x(), option.rect.y()), QRegion(0, 0, item_widget->rect().width()/*item_widget->sizeHint().width()*/, /*item_widget->rect().height()*/item_widget->sizeHint().height()), QWidget::DrawChildren);
painter->begin(originalPaintDev);
}
. 미리 Thx! 질문 제목이 좋기를 바랍니다. 환영합니다.
정답은 아니지만 거의! hlBottom = 반역적인 QTableWidget을 포함하는 가로 레이아웃을 가진'tableWidget-> resize (m_ui-> hlBottom-> sizeHint(), width(), m_ui-> hlBottom-> sizeHint(). 당신 덕분에 내 문제에 대한 올바른 해결책을 찾았습니다! 내'forceUpdate()'호출 후에 그것을한다. 고마워요 !!! 어쩌면 당신은 당신의 대답을 편집 할 수 있고 그것을 해결책 등으로 표시 할 것입니다;) – RDK