如何绘制QTreeview内容

时间:2012-02-14 10:57:15

标签: qt qtreeview qpainter

我正在尝试在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中。否则只会出现一些树视图。

有人知道如何解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

似乎在尝试在QPixmap中渲染窗口小部件之前,此问题很可能与窗口小部件未在客户端屏幕上调整大小有关。

您可以在QTreeView上调用show(),然后将其绘制到QPixmap,或者您可以尝试计算方法中的尺寸。