qt重写了QFrame的paintEvent,怎么才能显示出来

zxt5105515 2012-02-23 01:10:17
想在qrame中画图,就从QFrame继承得到了一个新类myframe,重写了paintEvent
然后在mainwindow定义中添加了一行 myframe *frame;
,现在的问题是怎么让frame在主窗口上显示
如下

//mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
frame= new MyFrame();//这样写就新弹出一个新窗口 ,显示正常,但不是在主窗口内
frame.show();
}
//第二种写法
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
frame= new MyFrame(this);//这样写就什么都不显示了
frame.show();
}


...全文
863 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxt5105515 2012-02-23
  • 打赏
  • 举报
回复
很囧啊,其实frame已经显示了,但因为mywidget 默认大小是100*50,绘图绘到外面就看不到了
用setCentralWidget(frame)或是setGeometry(QRect&)都能解决

jdwx 2012-02-23
  • 打赏
  • 举报
回复
要用到这个函数:void QMainWindow::setCentralWidget ( QWidget * widget )
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
frame= new MyFrame(this);//这样写就什么都不显示了
//frame.show();
setCentralWidget(frame);
}
这几天确实不是头一次回答这个问题了。
xiachm 2012-02-23
  • 打赏
  • 举报
回复
呵呵,兄弟真逗。你第二种写法其实Frame已经显示出来了,但Frame没有外框而且背景和窗口是一样的,所以你看不出来。

不信加一句frame->setStyleSheet("background-color: rgb(255, 0, 0);");

这是我最近几天碰到的第二个相同的问题了:)
bestman 2012-02-23
  • 打赏
  • 举报
回复
你做个层,然后把frame添加到主窗口的层里,那个show()函数在main函数中显示就行了
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在Qt框架中,QFrame 是一个基础且关键的组件,主要用于作为其他控件的容器或作为带有边框的独立控件。本文将探讨如何在 QFrame 的子部件上进行绘图,以实现自定义的视觉效果。这一过程通常涉及 Qt 的事件处理机制和绘图 API。Qt 提供了 PainterQ 类来支持图形绘制,QPainter 可以在 QWidget、QImage 或 QPixmap 等 QPaintDevice 实例上进行绘图。对于 QFrame,需要重写 paintEvent() 函数,这是 Qt 用于处理窗口部件绘图事件的机制。 以下是一个示例代码,展示如何在 QFrame 的子类中实现绘图: 在上述代码中,paintEvent() 被重写后,首先调用了基类的 paintEvent(),以确保 QFrame 的默认行为(如边框绘制)得以保留。接着,通过 QPainter 对象进行自定义绘图。setRenderHint() 用于开启抗锯齿,提升绘制质量;setPen() 和 setBrush() 分别设置线条和填充颜色,drawEllipse() 则用于绘制椭圆。 对于更复杂的图形绘制,可以使用 QPainterPath 创建路径并通过 drawPath() 进行绘制;drawLines() 和 drawRects() 可以绘制直线和矩形;drawText() 用于添加文本;drawPixmap() 或 drawImage() 可用于绘制像素数据。这些通过函数的组合,可以实现各种复杂的图形界面。 如果需要在 QFrame 的子部件上绘图,例如一个 QWidget,则需要确保该子部件也重写paintEvent() 并执行类似的绘图操作。此外,还可以通过 installEventFilter() 为子部件安装

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧