2012-02-14 19 views
1

私は別のQWidgetでレンダリングして印刷するためにQTreeviewの内容をQPixmapにペイントしようとしています。 QTreeviewは、ユーザによって既に見られている場合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; 
} 

これは非常にうまく機能:

現在、私のコードは、そのように見えます。ツリービューはメインウィンドウのタブに表示されます。ユーザーがツリービューを表示し、上記のコードを実行するボタンをクリックすると、すべてのツリービューがQPixmapに表示されます。さもなければ、少しのツリービューしか現れません。

誰もこの問題を解決する方法を知っていますか?

おかげ

答えて

0

は、この問題が最も可能性の高いウィジェットに関連QPixmapの中でそれをレンダリングしようとする前に、クライアントの画面にサイズ設定されていないようです。

QTixViewにshow()を呼び出してからQPixmapにペイントするか、メソッド内の次元を計算することができます。

+0

ありがとうございますが、うまくいきません:( 幅と高さを任意の値に設定しても、常にツリービューの同じ小さな左上部分が表示されます – tir0nik

関連する問題