多界面有背景程序在界面(窗体或窗体内容)切换时,闪烁问题
2011-08-15 00:56
411 查看
t 相关. 多界面有背景程序在界面(窗体或窗体内容)切换时,闪烁问题.[问题点数:50分,结帖人:liur]
*
* liur
* (徘徊)
*
* 等 级:
* 结帖率:100.00%
*
楼主发表于:2007-11-08 16:13:08
程序说明:
商品展示程序.
由于商品分类多样,所以需要使用多级界面来区分.并提供搜索功能.同时可以支持商品实力图显示.
为了程序的美观,界面上使用了背景图.
不使用web形式开发(和最后的发行有关系).使用c++ 联合 qt3 库开发
目前的问题:
由于程序界面多样,界面上的控件也多,并界面有背景图片.所以在切换界面的时候会有闪烁.界面背景图闪烁,图片控件中的图片也闪烁.
求教:
1. 我应该使用怎么样的框架设计比较好? 我主要是想请教一下这样的应用,使用怎么样的框架设计比较合理,我很担心图片的闪烁和我的框架设计有关系.
2. qt 中的双缓冲代码该如何写? 我总感觉我写的双缓冲代码没效果.
ps:
1. 为解决闪烁问题. 我使用了图片显示双缓存.
2. 我使用过的框架模型(效果不理想) :
a,只有一个dialog,换界面就是换此 dialog 的背景图片,并移动相应的控件.
b,将所有界面全部创建好.等需要显示某界面时,让此界面出现(模式).
c,创建好所有界面 并 非模式显示出来.需要某界面时,让此界面置顶.
d,界面可以理解成窗体切换,也可以说是窗体上的内容切换.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
回复次数:9
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#1楼 得分:0回复于:2007-11-08 18:10:59
我在 qt3 中的双缓冲代码如下:
首先通过图片类 QPixmap map;加载一个图片 map.load("xxx");
然后在 QWidget 的
paintEvent(QPaintEvent *pe)
{
if (!map.isNull()) {
QRect rc = pe->rect();
QPixmap pm( rc.size()); // 内存空图
pm.fill(this, rc.topLeft()); // 用当前设备信息填充空图.把这句注释了也不影响
QPainter p;
p.begin(&pm); // 用空图创建绘图相关的类.
p.translate(-rc.x(), -rc.y());
p.drawPixmap(......, map); // 在内存里,把 map 画到 pm 上
p.end();
bitBlt( this, rc.topLeft(), &pm); // 用画好的内存图片覆盖当前设备图.
}
}
这里我有点不理解.首先我通过 map 已经把图片加载到内存中,所以我认为在 paintEvent()中
if (!map.isNull()) {
bitBlt(this, rc.topLeft(), &map);
}// 这样做不一样是把图片覆盖了当前设备图码? 其他的代码是把一个图片画到另外一个图上,我直接用原始图不一样的码?
还有就是....是不是我的理解有问题啊? 用了双缓冲以后图片该闪烁还是闪烁,一点情面都不给.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:文件系统ext2的一些不理解
* sunote用户头像
* sunote
* (虫草)
*
* 等 级:
*
#2楼 得分:5回复于:2007-11-10 13:19:47
顶
qt学了 4天了
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:急救:pthread多线程问题。
* cceczjxy用户头像
* cceczjxy
* (本机来自地狱)
*
* 等 级:
*
6
2
#3楼 得分:15回复于:2007-11-10 13:25:54
http://www.qiliang.net/qt/tutorial.html
这里边的有几个例子,好象是第三个吧讲到了界面切换时的闪烁的问题.你看看就知道该怎么处理了.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:shell程序、fork()函数、execve()函数之间什么关系?
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#4楼 得分:0回复于:2007-11-10 17:46:39
to cceczjxy:
通过您的提醒,例子我都看了.目前来说没有得到相关的信息.
例子中的控件闪烁都是由于窗体大小变化照成的.而我这里主要是由于控件中添加了背景图,切换窗体时,背景图片刷新速度慢(我已经使用了双缓冲)照成闪烁.
以前使用 MFC 库的时候也做过这种效果,但是不会闪烁的.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:ldapsearch获取的值,如果有中文如何处理
* foxdeng用户头像
* foxdeng
* (江洋大刀)
*
* 等 级:
*
#5楼 得分:15回复于:2007-11-11 22:44:36
你的背景图的图片解码可能使用的是软解码,也有可能是没有经过优化
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:如何使LINUX机器CPU使用率为100%的办法。
* stormful用户头像
* stormful
* (风暴)
*
* 等 级:
*
#6楼 得分:15回复于:2007-11-12 01:18:56
你在提出问的时候调理非常清晰,这是程序员的风格,非常令人欣赏。
5、6年前写过QT,现在差不多忘光了。不过那是看过不少QT代码,好像没什么不能解决的。怎么不自己去深入探查下,就当周末娱乐了?
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#7楼 得分:0回复于:2007-11-12 16:02:39
to foxdeng:
图片解码肯定是软件的.解码是由 qt 库完成的.除去使用双缓冲,我不知道还能如何优化了...希望指教.
to stormful:
目前qt使用不到2个月.资源积累很少.好的qt网还不知道.而这个问题我已经研究了4~5天了.黔驴技穷了-_-||
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#8楼 得分:0回复于:2007-11-14 14:57:08
现在主要是想了解一下,想我这样的一种程序.使用快速开发工具来做的话,一般是如何设计程序流程呢? 是窗体切换码? 我记的以前有搞过一个 delphi 的程序.也是这样切换窗体的.不过好像不存在闪烁......
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#9楼 得分:0回复于:2007-11-27 17:54:22
现在搞过去了.控件使用 设置背景图片方式(其实就是自己实现 AncestorOrigin).显示图片的时候其实是显示前景图片...这里出现了2个图片的概念.好像和windows上编程有些不一样.也可能是我自己就没理解吧.
总的来说自己想办法实现 AncestorOrigin就对了.
http://topic.csdn.net/u/20071108/16/d32058ab-3130-4c09-bd39-07090cedf2bd.html
*
* liur
* (徘徊)
*
* 等 级:
* 结帖率:100.00%
*
楼主发表于:2007-11-08 16:13:08
程序说明:
商品展示程序.
由于商品分类多样,所以需要使用多级界面来区分.并提供搜索功能.同时可以支持商品实力图显示.
为了程序的美观,界面上使用了背景图.
不使用web形式开发(和最后的发行有关系).使用c++ 联合 qt3 库开发
目前的问题:
由于程序界面多样,界面上的控件也多,并界面有背景图片.所以在切换界面的时候会有闪烁.界面背景图闪烁,图片控件中的图片也闪烁.
求教:
1. 我应该使用怎么样的框架设计比较好? 我主要是想请教一下这样的应用,使用怎么样的框架设计比较合理,我很担心图片的闪烁和我的框架设计有关系.
2. qt 中的双缓冲代码该如何写? 我总感觉我写的双缓冲代码没效果.
ps:
1. 为解决闪烁问题. 我使用了图片显示双缓存.
2. 我使用过的框架模型(效果不理想) :
a,只有一个dialog,换界面就是换此 dialog 的背景图片,并移动相应的控件.
b,将所有界面全部创建好.等需要显示某界面时,让此界面出现(模式).
c,创建好所有界面 并 非模式显示出来.需要某界面时,让此界面置顶.
d,界面可以理解成窗体切换,也可以说是窗体上的内容切换.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
回复次数:9
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#1楼 得分:0回复于:2007-11-08 18:10:59
我在 qt3 中的双缓冲代码如下:
首先通过图片类 QPixmap map;加载一个图片 map.load("xxx");
然后在 QWidget 的
paintEvent(QPaintEvent *pe)
{
if (!map.isNull()) {
QRect rc = pe->rect();
QPixmap pm( rc.size()); // 内存空图
pm.fill(this, rc.topLeft()); // 用当前设备信息填充空图.把这句注释了也不影响
QPainter p;
p.begin(&pm); // 用空图创建绘图相关的类.
p.translate(-rc.x(), -rc.y());
p.drawPixmap(......, map); // 在内存里,把 map 画到 pm 上
p.end();
bitBlt( this, rc.topLeft(), &pm); // 用画好的内存图片覆盖当前设备图.
}
}
这里我有点不理解.首先我通过 map 已经把图片加载到内存中,所以我认为在 paintEvent()中
if (!map.isNull()) {
bitBlt(this, rc.topLeft(), &map);
}// 这样做不一样是把图片覆盖了当前设备图码? 其他的代码是把一个图片画到另外一个图上,我直接用原始图不一样的码?
还有就是....是不是我的理解有问题啊? 用了双缓冲以后图片该闪烁还是闪烁,一点情面都不给.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:文件系统ext2的一些不理解
* sunote用户头像
* sunote
* (虫草)
*
* 等 级:
*
#2楼 得分:5回复于:2007-11-10 13:19:47
顶
qt学了 4天了
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:急救:pthread多线程问题。
* cceczjxy用户头像
* cceczjxy
* (本机来自地狱)
*
* 等 级:
*
6
2
#3楼 得分:15回复于:2007-11-10 13:25:54
http://www.qiliang.net/qt/tutorial.html
这里边的有几个例子,好象是第三个吧讲到了界面切换时的闪烁的问题.你看看就知道该怎么处理了.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:shell程序、fork()函数、execve()函数之间什么关系?
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#4楼 得分:0回复于:2007-11-10 17:46:39
to cceczjxy:
通过您的提醒,例子我都看了.目前来说没有得到相关的信息.
例子中的控件闪烁都是由于窗体大小变化照成的.而我这里主要是由于控件中添加了背景图,切换窗体时,背景图片刷新速度慢(我已经使用了双缓冲)照成闪烁.
以前使用 MFC 库的时候也做过这种效果,但是不会闪烁的.
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:ldapsearch获取的值,如果有中文如何处理
* foxdeng用户头像
* foxdeng
* (江洋大刀)
*
* 等 级:
*
#5楼 得分:15回复于:2007-11-11 22:44:36
你的背景图的图片解码可能使用的是软解码,也有可能是没有经过优化
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
精华推荐:如何使LINUX机器CPU使用率为100%的办法。
* stormful用户头像
* stormful
* (风暴)
*
* 等 级:
*
#6楼 得分:15回复于:2007-11-12 01:18:56
你在提出问的时候调理非常清晰,这是程序员的风格,非常令人欣赏。
5、6年前写过QT,现在差不多忘光了。不过那是看过不少QT代码,好像没什么不能解决的。怎么不自己去深入探查下,就当周末娱乐了?
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#7楼 得分:0回复于:2007-11-12 16:02:39
to foxdeng:
图片解码肯定是软件的.解码是由 qt 库完成的.除去使用双缓冲,我不知道还能如何优化了...希望指教.
to stormful:
目前qt使用不到2个月.资源积累很少.好的qt网还不知道.而这个问题我已经研究了4~5天了.黔驴技穷了-_-||
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#8楼 得分:0回复于:2007-11-14 14:57:08
现在主要是想了解一下,想我这样的一种程序.使用快速开发工具来做的话,一般是如何设计程序流程呢? 是窗体切换码? 我记的以前有搞过一个 delphi 的程序.也是这样切换窗体的.不过好像不存在闪烁......
* 对我有用[0]
* 丢个板砖[0]
* 引用
* 举报
* 管理
* TOP
* liur用户头像
* liur
* (徘徊)
*
* 等 级:
*
#9楼 得分:0回复于:2007-11-27 17:54:22
现在搞过去了.控件使用 设置背景图片方式(其实就是自己实现 AncestorOrigin).显示图片的时候其实是显示前景图片...这里出现了2个图片的概念.好像和windows上编程有些不一样.也可能是我自己就没理解吧.
总的来说自己想办法实现 AncestorOrigin就对了.
http://topic.csdn.net/u/20071108/16/d32058ab-3130-4c09-bd39-07090cedf2bd.html
相关文章推荐
- 如何使STATIC控件的背景透明以及动态改变控件文本内容时闪烁的问题
- c# 窗体的背景图片在加载时,背景图片闪烁问题 已解决
- 给MDI 父窗体添加背景和解决闪烁的问题。
- (转)解决WINDOWS 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验(zt)
- 解决Windows 程序界面闪烁问题的一些经验 & 不用双缓冲实现无闪烁图象
- 图片背景的窗体的闪烁(或花屏)问题
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- Qt 解决界面切换时的闪烁问题
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- 将DataGridView 中DataGridViewComboBoxColumn列的Items内容更新后,首次执行程序界面没有更新的问题
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验
- 解决Windows 程序界面闪烁问题的一些经验