簡體   English   中英

在Qt中繪制內部小部件

[英]painting inside widget in Qt

我創建了一個非常簡單的GUI,它有一個按鈕和Display Widgets的“Graphics View”小部件。 在按下按鈕時,我希望在“圖形視圖”小部件上繪制一條線。 我已通過右鍵單擊設計視圖中的窗口小部件,然后選擇更改objectName,將“圖形視圖”窗口小部件的名稱更改為gv。 我無法理解該如何繪制線條。 我在Qt上閱讀了各種文本,提供了有關QPainter,PaintEvent等的信息。但我更加困惑。

請幫助我。 一個小的示例代碼對我來說真的很有用,因為我是Qt的新手。

QGraphicsView用於顯示由名為QGraphicsScene的組件管理的QGraphicsItem實例。 在您的情況下,您將創建一個QGraphicsLineItem並將其添加到場景中,或者通過調用QGraphicsScene實例的addLine成員函數將其直接創建為場景項。

所有繪圖都將由Qt本身完成,假設您確實正確連接了圖形視圖和場景。 請務必閱讀圖形視圖框架 ,該框架概述了這些組件的工作原理。

您將在此處找到有關如何使用圖形視圖框架管理和顯示場景的代碼示例: http//doc.trolltech.com/4.6/examples-graphicsview.html

你可以畫成QPainter

要么覆蓋痛苦的事,要么畫在那里

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 *直接繪制到屏幕或圖像上。

首先,你必須知道有關QPainter的一些信息才能從中受益。

QPainter提供高度優化的功能,以滿足大多數繪圖GUI程序的要求。 它可以繪制從簡單的圖形基元(由QPoint,QLine,QRect,QRegion和QPolygon類表示)到復雜形狀(如矢量路徑)的所有內容。我們使用它在繪制設備上繪制然后渲染它來查看,我們有很多qpaint設備如: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

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM