如何绘制QTreeview内容
问题描述:
我试图在QPixmap中绘制QTreeview的内容以便将其呈现在另一个QWidget中并将其打印出来。如何绘制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中。否则,只会出现一点树视图。
有谁知道如何解决这个问题?
感谢
答
看来,这个问题是为了显示它在QPixmap的前最有可能与没有大小的客户端屏幕小部件。
您可以在将其绘制到QPixmap之前调用QTreeView上的show(),或者您可以尝试计算方法中的尺寸。
谢谢,但它不起作用:( 即使我将宽度和高度设置为任意值,它总是显示树视图的相同的小左上部分 – tir0nik 2012-02-15 14:45:09