Qt 关于调用父类的paintEvent问题

我用paintEvent在一个widget里面画图,我将widget提升为一个类,在类的构造函数里面
添加两行代码:
this->setFrameShape(QFrame:Winpanel);
this->setFrameShadow(QFrame:Sunken);
开始没有声明paintEvent()函数时候,可以看到边框效果,但是定义了paintEvent()函数
之后,就没有效果了,后来查了一下 ,发现paintEvent()是虚函数,我自己定义的paintEvent()
会覆盖父类的paintEvent();然后我在自己定义的paintEvent里面调用了父类的paintEvent()
之后就好了,但是我不知道为什么,我继承的父类是QFrame,但是这是为什么呢?父类的paintEvent()有什么用?

qt

1个回答

并不会覆盖父类的函数,这个叫多态,你可以去看看C++关于虚函数的部分。调用父类的paintEvent()是为了显示你设置的效果,它有自己的实现,不过你看不到

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
qt绘图时paintEvent执行不及时

我想在qt中绘制一条轨迹,是由好多个点组成的。想在显示时有那种绘制的动画过程,所以每添加一个点调用一次update(),但qt是将所有的update压缩到一起最后用paintevevt显示的,动画效果就消失了。用repaint替换update程序就报错。求各位高人指点应该怎样才能实现这个动画效果啊?

Qt的update不进入paintevent更新不了

#include"A.cpp" #include"B.cpp" mian::Qwidget {……} A.cpp中 {…… B.setvalue(para); ……} B.cpp中 B::B(QWidget *parent) : QWidget(parent) { m_startAngle=0; // m_currentvalue=0; UpdateTime=new QTimer(this); UpdateTime->setInterval(10); connect(UpdateTime,SIGNAL(timeout()),this,SLOT(UpdateGraph())); //UpdateTime->start(); } void PShowDisplay::paintEvent(QPaintEvent *) {… PARA//包含这个一直变化的参数希望通过update来更新…} …… setvalue(para) { PARA=para;//参数一直变化 UpdateTime->start(); } void PShowDisplay::UpdateGraph() { this->update();//没有进入paintevent中 } 请问为什么没有更新??有一个例子和我的代码一样, 为啥他额能够更新,我的不能呢??

QT5 为什么我调用paintEvent,图片和文字都显示不了了

这是我显示图片的代码 ``` QImage image(pic); pixmap = new QPixmap; pixmap->fromImage(image); setPixmap(*pixmap); ``` 可是我把paintEvent删除之后图片就又显示出来了啊

QT 画图时在按钮的槽函数中创建对象,点击按钮时,paintevent就不会执行是怎么回事

我想做一个游戏,在dialog的子类里定义游戏窗口包括相关按钮,然后把自定义一个画图类B(继承自widget),用于游戏的具体实现(包括绘图)。 我在dialog的子类里生命声明了类B的指针,并在该构造函数里创建对象,然后在类B实现paintevent,这就在dialog的子类里的窗口上能绘图,-----但是在相关按钮中创建对象,然后在dialog的子类窗口就不能绘图,发现paintevent没有调用,这是为什么呢,是不是画图类B的对象必须在窗口类的构造函数中创建啊???

QT paintEvent 中的一个int值 怎么通过图形界面输入?

就是下面的n值,先谢谢大佬们了 ``` void MainWindow::paintEvent(QPaintEvent *) { int D=5; int n;//这个值 point *p=new point[n]; QPainter painter(this); QPen pen; pen.setColor(Qt::blue); pen.setWidth(6); painter.setPen(pen); QPointF *pointf=new QPointF [n]; srand((unsigned int)(time(0))); for (int i=0; i<n; ++i) { p[i].x=rand()%1000+1; p[i].y=rand()%1000+1; pointf[i].setX(p[i].x); pointf[i].setY(p[i].y); } painter.drawPoints(pointf, n); point ans[2]; double dismin1 = closestpoint(p, n, ans[0], ans[1]); double dismin2 = closestpointBF(p,n); pen.setColor(Qt::red); pen.setWidth(4); painter.setPen(pen); painter.drawLine(ans[0].x,ans[0].y,ans[1].x,ans[1].y); std::string str1="The shortest distance is "+std::to_string(dismin1)+" glass state:broken point1:("+std::to_string(ans[0].x)+","+std::to_string(ans[0].y)+") point2:("+std::to_string(ans[1].x)+","+std::to_string(ans[1].y)+")"; std::string str2="The shortest distance is "+std::to_string(dismin1)+" glass state:not broken point1:("+std::to_string(ans[0].x)+","+std::to_string(ans[0].y)+") point2:("+std::to_string(ans[1].x)+","+std::to_string(ans[1].y)+")"; std::string str3="Brute Force:"+std::to_string(dismin2)+" Divide&Conquer:"+std::to_string(dismin1); QString qstr1 = QString::fromStdString(str1); QString qstr2 = QString::fromStdString(str2); QString qstr3 = QString::fromStdString(str3); if(dismin1<D) painter.drawText(150, 1050, qstr1); else painter.drawText(150, 1050, qstr2); painter.drawText(350, 1075, qstr3); //delete []p; } ```

自己用Qt画了一个方块,想要控制方块移动,paintevent和keypressevent已经写好

void Widget::paintEvent(QPaintEvent*event) {QPainterpainter(this); painter.setPen(QPen(Qt::black,8)); painter.drawRect(50,50,50,50);} void Widget::keyPressEvent(QKeyEvent*event){ switch(event->key()) {caseQt::Key_S: move(pos().x(),ui->pushButton->pos().y()-50);break; caseQt::Key_W: move(pos().x(),ui->pushButton->pos().y()+50);break; default:QWidget::keyPressEvent(event);}}

QT paintEvent(QPaintEvent *)画图问题 急急急

#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { setFixedSize(600,600); QLabel *label = new QLabel(tr("Images side is 50 !")); label->setFixedHeight(50); QLineEdit *edit = new QLineEdit(tr("50")); //QLineEdit *edit2 = new QLineEdit(); QPushButton *button1 = new QPushButton(tr("Random")); button1->setFixedHeight(50); QPushButton *button2 = new QPushButton(tr("Previous")); button2->setFixedHeight(50); QPushButton *button3 = new QPushButton(tr("Next")); button3->setFixedHeight(50); QGroupBox *box = new QGroupBox; QRadioButton *radio1 = new QRadioButton(tr("3*3")); QRadioButton *radio2 = new QRadioButton(tr("5*5")); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); box->setLayout(vbox); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(label); layout->addWidget(edit); layout->addWidget(button1); //layout->addWidget(edit2); layout->addWidget(button2); layout->addWidget(button3); layout->addWidget(box); layout->setAlignment(Qt::AlignTop); setLayout(layout); L=edit->text().toInt();//**这里** //QString str = QString::number(L); //edit2->setText(str); connect(button1,SIGNAL(clicked()),this,SLOT(change())); } void Widget::change() { //this->repaint(); this->update(); } void Widget::random() { int m = qrand()%100; if(m<=20){ color = false; }else{ color = true; } } void Widget::paintEvent(QPaintEvent *) { int length; int i=0; int j=70;//**这里** //length=edit->text().toInt();//为什么用这两行行代码程序就崩溃了,要怎样才能实现根据edit中输入的数值 //L=edit->text().toInt(); // 来刷新我生成矩形的数目啊 length=L; QPainter painter(this); for(int m=0;m<=length;m++){ for(int n=0;n<=length;n++){ painter.begin(this); random(); if(color){ painter.setBrush(QBrush(Qt::white,Qt::SolidPattern)); }else{ painter.setBrush(QBrush(Qt::black,Qt::SolidPattern)); } painter.setPen(QPen(Qt::gray)); painter.drawRect(i,j,i+10,j+10); painter.end(); i=i+10; } i=0; j=j+10; } }

qt的重绘事件的显示问题

用重绘事件显示一段硬盘信息,希望每次update都只显示当次的信息,结果第二次update后第一次绘画的也会留在上面,以后每次update也就只会显示两个信息,以下是我的重绘事件的全部处理代码 ``` QPainter painter(this); for(int i = 0;i < statListString.count();++i) { painter.drawText(0,90 + 16 * i,statListString.at(i)); } ``` 可以看到每次重绘的开始地点是一样的,但是结果第一次后呢是![图片说明](https://img-ask.csdn.net/upload/201506/25/1435197564_635815.png),第二次后的每次就是![图片说明](https://img-ask.csdn.net/upload/201506/25/1435197592_913850.png),希望有经验的大神指教

求问大神:Qt用label显示图片,如何实现第一次点击后显示矩形,第二次点击后再显示一个矩形,之前的不消失

求问大家,我用label显示图片,重写paintEvent来显示鼠标点击位置的一个矩形,在 mousePressEvent里用update()来实现随鼠标位置更新矩形,但是这样就会使之前的 矩形消失。 怎么样才能实现鼠标每点击一次,在鼠标位置显示一个矩形,且之前的不会消失。 代码如下: **QImageLabel.h** ``` class QImageLabel : public QLabel { Q_OBJECT public: QImageLabel(QWidget *parent = 0); virtual ~QImageLabel(); protected: void paintEvent(QPaintEvent *event); void mousePressEvent(QMouseEvent *event); private: QPoint currentpos; }; ``` **QImageLabel.cpp** ``` #include "QImageLabel.h" #include <QtWidgets> QImageLabel::QImageLabel(QWidget *parent): QLabel(parent) { currentpos.setX(0); currentpos.setY(0); } QImageLabel::~QImageLabel() { } void QImageLabel::paintEvent(QPaintEvent *event) { QLabel::paintEvent(event); //需要调用父类的paintEvent事件,否则Label都无法绘制 QPainter painter(this); painter.setPen(Qt::red); painter.drawRect(currentpos.x() - 30, currentpos.y() - 30, 60, 60); } void QImageLabel::mousePressEvent(QMouseEvent *event) { currentpos = event->pos(); update(); } ```

Qt中PaintWidget在MainWindow下不能绘制

main.cpp ``` #include "mainwindow.h" #include <QApplication> #include "paintwidget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); w.showchild(); return a.exec(); } ``` mainwindow.cpp ``` #include "mainwindow.h" #include "ui_mainwindow.h" #include "paintwidget.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { resize(800,600); } void MainWindow::showchild(){ PaintWidget widget(this); widget.show(); } MainWindow::~MainWindow() { delete ui; } ``` paintwidget.cpp ``` #include "paintwidget.h" #include <Qpainter> #include "qpainter.h" PaintWidget::PaintWidget(QWidget *parent) : QWidget(parent) { resize(800,600); setWindowTitle(tr("paint demo")); } void PaintWidget::paintEvent(QPaintEvent *){ QPainter painter(this); painter.drawLine(80,100,650,500); painter.setPen(Qt::red); painter.drawRect(10,10,100,400); painter.setPen(QPen(Qt::green,5)); painter.setBrush(Qt::blue); painter.drawEllipse(50,150,400,200); } ``` 没有报错,但是什么也没绘制出来。

QT5 QPixmap与绘制问题

求大神指导,我是要实现一个画笔的功能,我的想法就是用QPixmap类型的成员 把鼠标跟踪的点在mousemove中画出来,然后在paintevent中用drawPixmap 把图绘制出来,但是现在就是显示不出来。但是如果我在paintevent中申请QPixmap类型的临时变量进行显示的话就可以,但是这样有一个问题就是正因为是临时变量 所以每次都是画最近的鼠标偏移,我也想过用数组之类的把点都存下来,但是这样每次都得重新绘制慢不说 而且保存的很多点太费内存了~ 求大神指导,在线等

vs2010下QT5.4 使用QLabel加载图片后在该图片上鼠标拖动画框

已经成功加载图片,将QLabel子类化后,画不出来,部分代码如下: void MyLabel::paintEvent(QPaintEvent *event) { QLabel::paintEvent(event);//调用父类的paintEvent QPainter painter(this); painter.setPen(QPen(QColor(255, 255, 255)); painter.drawEllipse(300,400,400,400); } 求各位大神赐教!

qt paintevent 重载出现 out of definition 是什么错误?怎么解决呢

![问题如图图片说明](https://img-ask.csdn.net/upload/201505/05/1430811595_280376.png)

QT Qlabel *label 怎样在固定坐标处显示图片,setPixmap貌似不行,不想用paintEvent

Qlabel *label; label->setPixmap((QPixmap(":/img/xxx.png"))); 这样能显示一张图片,但是不能设置坐标。 paintEvent()里可以设置坐标,但是这个事件一直在运行,我想在调用时再让他运行。

QT中实现多层Widget,而下层播放视频处于不断重绘的状态,怎么实现?

我重新说明下,首先我有三个Widget,它们处于层叠状态,由上到下1,2,3;现在我用最下面的一层比如说3我设置为底板颜色为红,2为播放视频的控件,1为悬浮在上的透明Widget用于实现其他一些效果或者放置其他控件,当我播放视频时,重绘效果触发,把1上面的有色控件都覆盖了,怎么避免发生这种情况,什么raise,setwindowflags(Qt::windowStaysOnTop)也不行。。。。

QT 绘图完成后UI界面卡顿,无响应

刚接触qt,用UI在主线程中绘图,绘图过程没卡死,绘图完成不能动UI,移动会卡死。 求解决方法

Qt 如何清除在窗口上已画的图形

首先我将主窗口设置为透明: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowOpacity(1); setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); .... ``` 然后我希望在主窗口上画各种图形(直线,圆等),检测鼠标左键按下,记录第一个点位置,然后鼠标移动时可以从第一个点的位置画一条到当前位置的直线,大致代码如下: ``` void MainWindow::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { firstPnt = e->pos(); } } void MainWindow::mouseMoveEvent(QMouseEvent *e) { QPoint pnt = e->pos(); curPnt.setX(e->x()); curPnt.setY(e->y()); this->repaint(0, 0, 1920, 1080); } ``` 我的主窗口是1920*1080,调用repaint后会执行paintEvent: ``` void MainWindow::paintEvent(QPaintEvent *e) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(Qt::black, 4, Qt::SolidLine, Qt::RoundCap)); painter.drawLine(firstPnt.x(), firstPnt.y(), curPnt.x(), curPnt.y()); } ``` 但是repaint并没有把原先的图形清除掉,而且鼠标移动画图过程非常卡顿,有什么好的方法么,我才接触QT不到一星期,大佬帮帮忙。

QOpenGLWidget 绘图选择paintEvent还是 paintGL,两者有什么区别吗?都能开启硬件加速吗?

QOpenGLWidget 绘图选择paintEvent还是 paintGL,两者有什么区别吗?都能开启硬件加速吗?

qt之中一个类的多个实例使用Qmutex锁的问题

我的Qt项目中有一个类A,在A下创建一个新的线程,线程执行完之后又向A类返回两个 数组,在A类中我需要把返回的数组转换成QImage类型并用paintEvent显示,由于显示 和转换不能同时进行,所以加了一个互斥两Qmutex,这样在A只有一个实例的时候没有 问题,但是当A有多个实例的时候就会出现问题,一个实例中的Qmutex锁上之后,其他实例里面Qmutex之间的代码段都无法运行了

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

javaWeb图书馆管理系统源码mysql版本

系统介绍 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书的信息查询、读者图书借阅情况的查询等

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

Java8零基础入门视频教程

Java8零基础入门视频教程

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

TTP229触摸代码以及触摸返回值处理

自己总结的ttp229触摸代码,触摸代码以及触摸按键处理

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

Ubuntu18.04安装教程

Ubuntu18.04.1安装一、准备工作1.下载Ubuntu18.04.1 LTS2.制作U盘启动盘3.准备 Ubuntu18.04.1 的硬盘空间二、安装Ubuntu18.04.1三、安装后的一些工作1.安装输入法2.更换软件源四、双系统如何卸载Ubuntu18.04.1新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列...

快速排序---(面试碰到过好几次)

原理:    快速排序,说白了就是给基准数据找其正确索引位置的过程.    如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾.    首先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小(如上图中18&amp;lt...

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

HTML期末大作业

这是我自己做的HTML期末大作业,花了很多时间,稍加修改就可以作为自己的作业了,而且也可以作为学习参考

Python数据挖掘简易入门

Python数据挖掘简易入门

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

C++语言基础视频教程

C++语言基础视频教程

UnityLicence

UnityLicence

软件测试2小时入门

软件测试2小时入门

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

超详细MySQL安装及基本使用教程

一、下载MySQL 首先,去数据库的官网http://www.mysql.com下载MySQL。 点击进入后的首页如下:  然后点击downloads,community,选择MySQL Community Server。如下图:  滑到下面,找到Recommended Download,然后点击go to download page。如下图:  点击download进入下载页面选择No...

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

web网页制作期末大作业

分享思维,改变世界. web网页制作,期末大作业. 所用技术:html css javascript 分享所学所得

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

相关热词 c# dbml文件 修改 c#遍历tree c# 能够控制单片机 c#对象写入数据库 c# 添加activex c#2005 json c# 数据库在云端 c# 字符串移位加密 c#禁用滚轮 c#实体类list去重复
立即提问