2010-09-08 54 views
3

插件我創建了一個非常簡單的GUI,有一個按鈕,並從顯示窗口小部件是「圖形視圖」窗口小部件。在按下按鈕時,我想要在「圖形視圖」小部件中繪製一條線。通過在設計視圖中右鍵單擊小部件,然後選擇更改objectName,我已將「Graphics View」小部件的名稱更改爲gv。我無法理解該線應該如何繪製。我閱讀了關於Qt的各種文本,提供了關於QPainter,PaintEvent等的信息,但是我更加困惑。畫裏面的Qt

請幫助我。由於我是Qt的新手,所以一個小的示例代碼對我來說真的很有幫助。

回答

3

你可以畫成的QPainter

要麼覆蓋的paintEvent並繪製有

void MyDisplayWidget::paintEvent(QPaintEvent*) 
{ 
    QPainter p(this); 
    p.setPen(Qt::green); 

    p.drawText(10,10,"hello"); 

} 

或畫成的QImage和顯示

QImage image = QImage(size); 
QPainter p(&image); 
p.drawText(10,10,"hello"); 
// draw or save QImage 

你甚至可以使用同一個平局函數將QPainter *直接繪製到屏幕或圖像上。

+1

我創建了一個小部件MyDisplayWidget。但是我使用Qt的拖放工具設計了一個窗體mainwindow.ui。我如何在這個gui中包含這個新的小部件? – nishant 2010-09-08 20:14:12

+1

爲了能夠在Qt的設計器應用程序中使用自定義小部件,需要做大量的編碼工作。如果您想在主窗口中使用自定義小部件,請使用設計器應用程序放置佔位符小部件(或框架),然後在主窗口的代碼中創建自定義小部件的實例並將其添加到佔位符。 – 2010-09-08 21:45:31

+0

@ nishant-4545:推廣的小工具是完成工作的快速方法。見http://doc.trolltech.com/4.6/designer-using-custom-widgets.html – 2010-09-09 19:31:35

4

甲的QGraphicsView是指,用於顯示由一個稱爲QGraphicsScene組件管理的QGraphicsItem的實例。就你而言,你可以創建一個QGraphicsLineItem並將其添加到場景中,或者通過調用QGraphicsScene實例的addLine成員函數直接將其創建爲場景的一個項目。

所有的繪製將使用Qt本身來完成,假設你沒有正確連接您的圖形視圖和場景。請務必閱讀The Graphics View Framework,以瞭解這些組件的工作原理。

你會發現如何管理代碼示例和顯示使用圖形視圖框架這裏的場景:http://doc.trolltech.com/4.6/examples-graphicsview.html

-1

首先你必須知道QPainter的一些資料,有它的好處。

了QPainter提供了高度優化的函數來完成大部分繪圖GUI程序需要的。由此可以得出,從簡單的圖形圖元的一切(由QPoint,QLine,查閱QRect,QRegion和QPolygon類表示)到複雜的形狀等。而且我們用它來畫上繪製設備的矢量路徑 然後使其以查看,我們有很多像Q漆設備:QWidget的,而QImage,QPixmap就QPicture,QPrinter來,和QOpenGLPaintDevice你可以使用其中的任何一個根據您的需求,然後創造qGraphic現場,並添加你畫裝置在qgraphic視圖中顯示qgraphic現場項目。

這裏是簡單的代碼:

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 
    scene=new QGraphicsScene(this); //allocate your scene to your main widget 
    view=new QGraphicsView(scene,this);//here is your view 
    pixmap=new QPixmap(QSize(700,700));// paint device 
    view->resize(700,700); 

} 

Widget::~Widget() 
{ 
    delete ui; 
} 

void Widget::paintEvent(QPaintEvent *e) 
{ 
    painter=new QPainter;// create your painter 
    painter->begin(pixmap);//add painter to your paint device 

    painter->fillRect(0,0,300,300,Qt::red);//draw rect 
    painter->setPen(Qt::yellow); 
    painter->drawLine(0,0,700,700);//draw line 
    painter->end(); 
    scene->addPixmap(*pixmap);// add your paint device to your scene 
    view->show();//then show your view 

}