1
私は別のQWidgetでレンダリングして印刷するためにQTreeviewの内容をQPixmapにペイントしようとしています。 QTreeviewは、ユーザによって既に見られている場合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;
}
これは非常にうまく機能:
現在、私のコードは、そのように見えます。ツリービューはメインウィンドウのタブに表示されます。ユーザーがツリービューを表示し、上記のコードを実行するボタンをクリックすると、すべてのツリービューがQPixmapに表示されます。さもなければ、少しのツリービューしか現れません。
誰もこの問題を解決する方法を知っていますか?
おかげ
ありがとうございますが、うまくいきません:( 幅と高さを任意の値に設定しても、常にツリービューの同じ小さな左上部分が表示されます – tir0nik