如何在QT中的框架上绘制
How do i Draw on a Frame in Qt?
好的,所以我已经用qt的拖放部分创建了我的UI,在UI中,我在另一个" Tab Widteg"中创建了一个" Tab Widget"。现在,在第二个标签小部件内部我创建了一个帧
我的问题是,我该如何在QT中的此框架上绘制?
我尝试过,但根本没有运气。IVE尝试了不同的方法,该程序运行良好,但是当我去看看框架是否被绘制时,我什么也看不到...请帮助我,以代码示例等。预先感谢。
void 2ndMainWindow::paintEvent(QPaintEvent *e)
{
QPainter paint(ui->rightTriangle_frame);
paint.drawEllipse(10,10,100,100);
paint.setPen(Qt::red);
paint.end();
}
我最终为那些想知道
的其他人做到了我的标题文件包括在私有插槽下
Ui::GeometryMainWindow *ui;
QGraphicsScene *scene;
QGraphicsEllipseItem *ellipse;
QGraphicsRectItem *rectangle;
在我的.cpp文件中我做了
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
QBrush redBrush(Qt::red);
QBrush blueBrush(Qt::blue);
QPen blackpen(Qt::black);
blackpen.setWidth(6);
ellipse = scene->addEllipse(10,10,100,100,blackpen,redBrush);
如果要在qframe上绘制一些自定义形状,我建议您使用qgraphicsview而不是qframe。实现小部件的油漆可能会造成性能问题。如果您使用QgraphicsView,则可以创建一个QgraphicsScene,并将您的项目添加到该场景中,这是做这种事情的一般且接受的方法。
或者,以下实现事件过滤器,
bool 2ndMainWindow::eventFilter(QObject *o, QEvent *e)
{
if (e->type() == QEvent::Paint) {
paintEvent((QPaintEvent *)e);
}
return QMainWindow::eventFilter(o, e);
}
在您的MainWindow的构造函数中,
installEventFilter(this);
顺便说一句,您应该在绘制PaintEvent功能中绘制椭圆之前设置笔。
看来,您正在覆盖主窗口的paintEvent()
方法 ,然后从那里试图在框架窗口小部件上绘画。查看您的控制台输出 - 您应该收到
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setPen: Painter not active
QPainter::end: Painter not active, aborted
取而代之的是您的 QFrame
widget(在qt设计器中,选择"促进到..."以定义用户定义的子类),在此子类中,覆盖paintEvent
如下:
void MyFrame::paintEvent(QPaintEvent *e) {
QPainter paint(this);
paint.setPen(Qt::red);
paint.drawEllipse(10,10,100,100);
paint.end();
QFrame::paintEvent(e);
}
请注意,为了绘制红色椭圆形,您当然需要在绘制椭圆之前设置笔颜色。您还应该调用父类的paintEvent()
方法以绘制框架边框。
请参阅https://github.com/afest/stackoverflow/tree/master/qtrepaint for SSCCE。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- catch框架有没有办法比较流或文件
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 使用Qt框架在c ++类中创建API调用
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何在ECS框架中更新组件数据和通知系统
- 用于在C++中绘制生成的迷宫的简单框架
- 如何在QT中的框架上绘制
- 在框架上绘制矩形
- 在框架上使用 OpenCV 绘制矩形
- 如何在不使用任何框架或库的情况下在屏幕上绘制图形
- 开放框架:绘制函数被多次调用