如何绘制QTreeview内容



我试图在QPixmap中绘制QTreeview的内容,以便在另一个QWidget中渲染并打印它。

目前我的代码是这样的:

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中渲染之前没有根据客户端的屏幕调整大小有关。

在将QTreeView绘制到QPixmap之前,可以调用它上的show(),也可以尝试在方法中计算尺寸。

最新更新