您的位置:首页 > 其它

多界面有背景程序在界面(窗体或窗体内容)切换时,闪烁问题

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: