求助:关于重绘窗体的问题

lwei2 2020-07-06 10:42:27
各位大佬,请问如何点击按钮后实现多次重绘一个窗体,只改变窗体局部的问题,不改变窗体的背景呢?我通过paintEvent这个函数重绘,结果,每次都会弹出另一个窗体,而不是在原有的窗体上重绘?例如:父窗体绘制了背景,子窗体1继承了父窗体,重新绘制了一些文字,子窗体2也继承了父窗体,绘制一些图片,在子窗体1中有一个按钮,点击它,会直接切换到子窗体2,而不是弹出窗体2。不知道大家有什么办法实现吗?希望可以给点意见,谢谢了!
...全文
9843 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwei2 2020-07-24
  • 打赏
  • 举报
回复
引用 20 楼 芒果黑 的回复:
[quote=引用 19 楼 lwei2 的回复:][quote=引用 18 楼 芒果黑 的回复:][quote=引用 16 楼 lwei2 的回复:][quote=引用 10 楼 芒果黑 的回复:]大概知道你的意思了。。。 你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
这样确实不会有切换闪的问题,但目前我有还有一个问题,就是只有一个主窗口,你说在PaintEvent里面绘制不同的背景图,点击按钮后,会切换。到最后,点击最后一个按钮我想谈出另一个窗口,而不显示前面这个主窗口。用hide隐藏后,在开启另一个窗口时,它的任务栏下的应用图标就不见了,这个该怎么找回呢?[/quote] 主窗口隐藏了那任务栏图标肯定隐藏了,后面显示窗口任务栏没有图标吗,有的话就设置成主窗口一样吧[/quote]后面显示的窗口任务栏没有应用程序图标。这个要怎么设置呢?其实,就是一个应用程序有两个对话框,第一个对话框有多个切换,切换结束后,弹出第二个对话框,并隐藏或关闭第一个对话框。如果隐藏,好像连应用程序的图标也不见了,如果关闭,那好像问题更大了……,不知道你有什么办法吗?[/quote] 第二个对话框你不给他设置顶级窗口,就是他的parent为nullptr,这样他就有自己的任务栏图标了[/quote]多谢多谢。
芒果黑 2020-07-23
  • 打赏
  • 举报
回复
引用 19 楼 lwei2 的回复:
[quote=引用 18 楼 芒果黑 的回复:][quote=引用 16 楼 lwei2 的回复:][quote=引用 10 楼 芒果黑 的回复:]大概知道你的意思了。。。
你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
这样确实不会有切换闪的问题,但目前我有还有一个问题,就是只有一个主窗口,你说在PaintEvent里面绘制不同的背景图,点击按钮后,会切换。到最后,点击最后一个按钮我想谈出另一个窗口,而不显示前面这个主窗口。用hide隐藏后,在开启另一个窗口时,它的任务栏下的应用图标就不见了,这个该怎么找回呢?[/quote]
主窗口隐藏了那任务栏图标肯定隐藏了,后面显示窗口任务栏没有图标吗,有的话就设置成主窗口一样吧[/quote]后面显示的窗口任务栏没有应用程序图标。这个要怎么设置呢?其实,就是一个应用程序有两个对话框,第一个对话框有多个切换,切换结束后,弹出第二个对话框,并隐藏或关闭第一个对话框。如果隐藏,好像连应用程序的图标也不见了,如果关闭,那好像问题更大了……,不知道你有什么办法吗?[/quote]
第二个对话框你不给他设置顶级窗口,就是他的parent为nullptr,这样他就有自己的任务栏图标了
lwei2 2020-07-23
  • 打赏
  • 举报
回复
引用 18 楼 芒果黑 的回复:
[quote=引用 16 楼 lwei2 的回复:][quote=引用 10 楼 芒果黑 的回复:]大概知道你的意思了。。。 你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
这样确实不会有切换闪的问题,但目前我有还有一个问题,就是只有一个主窗口,你说在PaintEvent里面绘制不同的背景图,点击按钮后,会切换。到最后,点击最后一个按钮我想谈出另一个窗口,而不显示前面这个主窗口。用hide隐藏后,在开启另一个窗口时,它的任务栏下的应用图标就不见了,这个该怎么找回呢?[/quote] 主窗口隐藏了那任务栏图标肯定隐藏了,后面显示窗口任务栏没有图标吗,有的话就设置成主窗口一样吧[/quote]后面显示的窗口任务栏没有应用程序图标。这个要怎么设置呢?其实,就是一个应用程序有两个对话框,第一个对话框有多个切换,切换结束后,弹出第二个对话框,并隐藏或关闭第一个对话框。如果隐藏,好像连应用程序的图标也不见了,如果关闭,那好像问题更大了……,不知道你有什么办法吗?
芒果黑 2020-07-23
  • 打赏
  • 举报
回复
引用 16 楼 lwei2 的回复:
[quote=引用 10 楼 芒果黑 的回复:]大概知道你的意思了。。。
你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
这样确实不会有切换闪的问题,但目前我有还有一个问题,就是只有一个主窗口,你说在PaintEvent里面绘制不同的背景图,点击按钮后,会切换。到最后,点击最后一个按钮我想谈出另一个窗口,而不显示前面这个主窗口。用hide隐藏后,在开启另一个窗口时,它的任务栏下的应用图标就不见了,这个该怎么找回呢?[/quote]
主窗口隐藏了那任务栏图标肯定隐藏了,后面显示窗口任务栏没有图标吗,有的话就设置成主窗口一样吧
lwei2 2020-07-23
  • 打赏
  • 举报
回复
引用 14 楼 这是一个正经昵称 的回复:
[quote=引用 13 楼 lwei2 的回复:][quote=引用 12 楼 这是一个正经昵称 的回复:] 有一个背景窗口。 有个QWidget 1号,parent为背景窗口,放按钮+文字 有个QWidget 2号,parent为背景窗口,放图片 启动后背景窗口和1号show,2号hide。 点击按钮后1号hide,2号show。 控件在窗口里显示和隐藏不会闪的。这两个控件,也可以认为就是一个窗口上有两块大小和位置自定义的画布。
试过了,感觉效果不是很好,会有一闪的现象。[/quote] 确定你的是控件?类型不是Window? 同一个位置放两个一样大小的控件,底部是QLabel,显示文字test,上面是QPushButton,点按钮的时候按钮hide,Label show,这么个简单控件显示切换难道会整个窗口黑一下或者直接消失一下再显示?只有两个窗口切换时,发送一个窗口缩小或消失,另一个窗口显示的时候才会有明显的一闪。控件过多加载不过来窗口会整个黑掉。[/quote]关于窗口切换的问题处理好了,我继承QDialog写了一个主窗口,然后在主窗口开启继承QWidget的画布,这样切换就不会有闪的问题。但结果,在快捷键上还是出问题了,设想是按回车键进行下一个按钮的事件,我添加keyPressEvent(QKeyEvent *event)函数对回车键的处理,除了主窗口有响应,其他继承QWidgets的都没响应,为啥呢?
lwei2 2020-07-23
  • 打赏
  • 举报
回复
引用 10 楼 芒果黑 的回复:
大概知道你的意思了。。。 你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
这样确实不会有切换闪的问题,但目前我有还有一个问题,就是只有一个主窗口,你说在PaintEvent里面绘制不同的背景图,点击按钮后,会切换。到最后,点击最后一个按钮我想谈出另一个窗口,而不显示前面这个主窗口。用hide隐藏后,在开启另一个窗口时,它的任务栏下的应用图标就不见了,这个该怎么找回呢?
  • 打赏
  • 举报
回复
引用 13 楼 lwei2 的回复:
[quote=引用 12 楼 这是一个正经昵称 的回复:] 有一个背景窗口。 有个QWidget 1号,parent为背景窗口,放按钮+文字 有个QWidget 2号,parent为背景窗口,放图片 启动后背景窗口和1号show,2号hide。 点击按钮后1号hide,2号show。 控件在窗口里显示和隐藏不会闪的。这两个控件,也可以认为就是一个窗口上有两块大小和位置自定义的画布。
试过了,感觉效果不是很好,会有一闪的现象。[/quote] 确定你的是控件?类型不是Window? 同一个位置放两个一样大小的控件,底部是QLabel,显示文字test,上面是QPushButton,点按钮的时候按钮hide,Label show,这么个简单控件显示切换难道会整个窗口黑一下或者直接消失一下再显示?只有两个窗口切换时,发送一个窗口缩小或消失,另一个窗口显示的时候才会有明显的一闪。控件过多加载不过来窗口会整个黑掉。
lwei2 2020-07-17
  • 打赏
  • 举报
回复
引用 14 楼 这是一个正经昵称 的回复:
[quote=引用 13 楼 lwei2 的回复:][quote=引用 12 楼 这是一个正经昵称 的回复:] 有一个背景窗口。 有个QWidget 1号,parent为背景窗口,放按钮+文字 有个QWidget 2号,parent为背景窗口,放图片 启动后背景窗口和1号show,2号hide。 点击按钮后1号hide,2号show。 控件在窗口里显示和隐藏不会闪的。这两个控件,也可以认为就是一个窗口上有两块大小和位置自定义的画布。
试过了,感觉效果不是很好,会有一闪的现象。[/quote] 确定你的是控件?类型不是Window? 同一个位置放两个一样大小的控件,底部是QLabel,显示文字test,上面是QPushButton,点按钮的时候按钮hide,Label show,这么个简单控件显示切换难道会整个窗口黑一下或者直接消失一下再显示?只有两个窗口切换时,发送一个窗口缩小或消失,另一个窗口显示的时候才会有明显的一闪。控件过多加载不过来窗口会整个黑掉。[/quote]你说的是Parent也是QWidget的一个子类吗?那放的按钮或文字或图片,是通过paintEvent去绘制还是自己初始化控件呢?如果通过初始化控件,好像背景窗口和子窗口重叠……
lwei2 2020-07-16
  • 打赏
  • 举报
回复
引用 12 楼 这是一个正经昵称 的回复:
有一个背景窗口。 有个QWidget 1号,parent为背景窗口,放按钮+文字 有个QWidget 2号,parent为背景窗口,放图片 启动后背景窗口和1号show,2号hide。 点击按钮后1号hide,2号show。 控件在窗口里显示和隐藏不会闪的。这两个控件,也可以认为就是一个窗口上有两块大小和位置自定义的画布。
试过了,感觉效果不是很好,会有一闪的现象。
  • 打赏
  • 举报
回复
有一个背景窗口。 有个QWidget 1号,parent为背景窗口,放按钮+文字 有个QWidget 2号,parent为背景窗口,放图片 启动后背景窗口和1号show,2号hide。 点击按钮后1号hide,2号show。 控件在窗口里显示和隐藏不会闪的。这两个控件,也可以认为就是一个窗口上有两块大小和位置自定义的画布。
lwei2 2020-07-13
  • 打赏
  • 举报
回复
引用 10 楼 芒果黑 的回复:
大概知道你的意思了。。。 你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
哦哦,我试过,在父类那里继承过同一个背景图,然后再主窗口A1那里自己添加控件或文字,当点击按钮切换到子窗口A2的时候,要怎么才能使得主窗口和子窗口都共用一个窗口?目前我只会做到主窗口A1点击按钮后,触发信号,告诉子窗口A2,要打开,结果,还是没有办法在同一个窗口实现重绘……
芒果黑 2020-07-13
  • 打赏
  • 举报
回复
大概知道你的意思了。。。
你这样,窗体还是只有一个,把你需要的背景绘制到图片里面,每个背景对应一张图片,在paintEvent里面绘制图片,你切换不同的画面就是切换不同的图片进行绘制,这样就不会有多个窗口切换闪的问题
lwei2 2020-07-13
  • 打赏
  • 举报
回复
graphicsItemGroup这个我试试。不过我想用QDialog写了一个父类,然后通过这个父类派生出多个子类窗口,但是子类窗口继承父类后,会再同一个窗体上绘制文字和图标或按钮,而不修改其背景。结果,因为点击按钮切换子窗口时,总会有那么一闪的现象把目前的窗口关闭再打开下一个子窗口。由于我利用了clicked信号发出后,就会把目前窗口关闭,打开下一个窗口。这样的效果达不到在同一个窗体中重绘窗体内容。在关闭窗口和开启下一个子窗口需要时间相应,而重绘直接会在当前窗口下,不改变其背景,绘制文字或图表。我想知道怎么利用PaintEvent或其他方法重绘呢?
一叶小舟_郭 2020-07-12
  • 打赏
  • 举报
回复
我刚查了一下, 好像你可以在同一个对象里面绘制,使用graphicsItemGroup管理就行 不用在不同的对象上画
lwei2 2020-07-06
  • 打赏
  • 举报
回复
我想要的效果就是例子中的那个样子,你可以看看问题中的例子。就是在点击按钮后,直接就切换下一个窗体,但它的背景不会改变,只是改变窗体中间的文字或图表
芒果黑 2020-07-06
  • 打赏
  • 举报
回复
没看懂你想要的效果是什么,最好有个图示说明
lwei2 2020-07-06
  • 打赏
  • 举报
回复
引用 1 楼 mideum 的回复:
正常的paintEvent是不会弹窗体的,你肯定哪里不对,没代码谁也不知道你有什么问题
,所以,目前只能在点击事件触发后,同槽函数去弹出第二个子窗口。这个效果不是很理想,因此,想问问看大家怎么实现呢
lwei2 2020-07-06
  • 打赏
  • 举报
回复
是,paintEvent是不会弹窗体,但是我要在同一个窗体中绘制多次,通过按钮触发绘制,因为paintEvent只有一个,我不知道怎么在一个paintEvent多次绘制局部的文字或图片或线条。
mideum 2020-07-06
  • 打赏
  • 举报
回复
正常的paintEvent是不会弹窗体的,你肯定哪里不对,没代码谁也不知道你有什么问题
lwei2 2020-07-06
  • 打赏
  • 举报
回复
加载更多回复(1)

16,216

社区成员

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

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