別の QWidget でレンダリングして印刷するために、QPixmap で QTreeview のコンテンツをペイントしようとしています。
現在、私のコードは次のようになります。
QPixmap PrintWidget::getTreeView(QTreeView* treeview){
QAbstractItemView::ScrollMode scrollMode = treeview->verticalScrollMode();
treeview->selectionModel()->setCurrentIndex(QModelIndex(),QItemSelectionModel::Clear);
treeview->setVerticalScrollMode(QTreeView::ScrollPerPixel);
int width = treeview->viewport()->size().width();
int scrollMax = treeview->verticalScrollBar()->maximum();
int height = treeview->maximumViewportSize().height() + scrollMax;
int currentPosition = treeview->verticalScrollBar()->sliderPosition();
treeview->verticalScrollBar()->setSliderPosition(0);
QPixmap pixmap(width,height);
QRegion region(0,0,width,height);
QPainter painter(&pixmap);
treeview->viewport()->render(&painter,QPoint(),region,
RenderFlags(QWidget::DrawChildren|QWidget::IgnoreMask));
treeview->verticalScrollBar()->setSliderPosition(currentPosition);
treeview->setVerticalScrollMode(scrollMode);
return pixmap;
}
これは、QTreeview が既にユーザーに表示されている場合に非常にうまく機能します。ツリービューは、メイン ウィンドウのタブに表示されます。ユーザーがツリービューを表示し、上記のコードを実行するボタンをクリックすると、すべてのツリービューが QPixmap に表示されます。それ以外の場合は、ツリービューの一部のみが表示されます。
この問題を解決する方法を知っている人はいますか?
ありがとう