如何绘制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(),或者您可以尝试计算方法中的尺寸。

+0

谢谢,但它不起作用:( 即使我将宽度和高度设置为任意值,它总是显示树视图的相同的小左上部分 – tir0nik 2012-02-15 14:45:09