1

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

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

谢谢

4

1 回答 1

0

似乎这个问题很可能与尝试在 QPixmap 中呈现它之前未调整到客户端屏幕大小的小部件有关。

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

于 2012-02-14T18:09:02.673 回答