C++ 在Qt中绘制内部小部件
我创建了一个非常简单的GUI,它有一个按钮和一个来自显示小部件的“图形视图”小部件。按下按钮时,我希望在“图形视图”小部件上画一条线。我已经将“图形视图”小部件的名称更改为gv,方法是在设计视图中右键单击该小部件,然后选择ChangeObjectName。我不明白这条线该怎么画。我在Qt上阅读了各种文本,这些文本提供了关于QPainter、PaintEvent等的信息,但我更困惑了C++ 在Qt中绘制内部小部件,c++,qt,C++,Qt,我创建了一个非常简单的GUI,它有一个按钮和一个来自显示小部件的“图形视图”小部件。按下按钮时,我希望在“图形视图”小部件上画一条线。我已经将“图形视图”小部件的名称更改为gv,方法是在设计视图中右键单击该小部件,然后选择ChangeObjectName。我不明白这条线该怎么画。我在Qt上阅读了各种文本,这些文本提供了关于QPainter、PaintEvent等的信息,但我更困惑了 请帮我做这个。一个小样本代码对我来说真的很有帮助,因为我是Qt新手。您可以在QPainter中绘制 覆盖paint
请帮我做这个。一个小样本代码对我来说真的很有帮助,因为我是Qt新手。您可以在QPainter中绘制 覆盖paintevent并在其中绘制
void MyDisplayWidget::paintEvent(QPaintEvent*)
{
QPainter p(this);
p.setPen(Qt::green);
p.drawText(10,10,"hello");
}
或者画成一个图像并显示它
QImage image = QImage(size);
QPainter p(&image);
p.drawText(10,10,"hello");
// draw or save QImage
您甚至可以使用与使用QPaint*相同的绘图功能直接绘制屏幕或图像。QGraphicsView用于显示QGraphicsSitem的实例,这些实例由名为QGraphicsCenter的组件管理。在您的情况下,您可以创建一个并将其添加到场景中,或者通过调用QGraphicscene实例的成员函数直接将其创建为场景的一项 假设您正确连接了图形视图和场景,所有绘图都将由Qt自己完成。请务必阅读,这将为您提供有关这些组件如何工作的概述
您将在此处找到如何使用图形视图框架管理和显示场景的代码示例:首先,您必须了解有关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
}
我创建了一个小部件MyDisplayWidget。但是我使用Qt的拖放功能设计了一个表单mainwindow.ui。如何在gui中包含这个新的小部件?要在Qt的designer应用程序中使用自定义小部件,需要进行大量的编码。如果要在主窗口中使用自定义小部件,请使用designer应用程序放置占位符小部件(或框架),然后在主窗口的代码中,创建自定义小部件的实例并将其添加到占位符中。@nishant-4545:升级小部件是完成工作的快速方法。请看@Arnold Spence-抱歉,这不是一个在按钮上画线的好例子。我用它把视频画进了一个GLWIDGETHET,不用担心。在他提到他正在使用Qt的设计器之后,我只是想为OP补充一些额外的信息:)