基于OgreBites::Widget的OEGUISystem 介绍

OEGUI是一个基于Ogre::Overlay的GUI系统,提供简单的GUI组件,并支持中文显示。相较于CEGUI,它更易于定制外观,但功能相对有限。本文介绍了OEGUI的基本组件、使用方法及扩展方式。

Q:什么是OEGUI?

A:OEGUI是一个基于Ogre::Overlay实现的GUI系统.在Ogre1.7版本的实例程序中实现了一些GUI的组件,OEGUI在这些组件的基础上仿照CEGUI实现了一个简单的GUI系统.

 

Q:OEGUISystem与CEGUI比较如何?

A:OEGUISystem现在仍然还是很简陋的,仅仅实现了一些基础的东西.比起CEGUI,功能很多地方还不完善.但OEGUISystem是完全基于Ogre的,改变各个组件的外观只需要更改对应的材质就可以实现多变的效果,这方面比CEGUI方便.

 

Q:OEGUI核心组件有哪些?

A:OEGUI包括3个核心组件.一个是OEGUISystem,全局全力类,用法了CEGUI::System类似.一个是Widget,指的各个窗口上的组件,比方说button,textBox等等.一个是OEWindow.OEWindow这个类存在的必要在于,各个Widget是基于Overlayelement的,而OverlayElement必须与对应的Overlay相关联才能实现显示.所以与CEGUI不同,在Widget与System之间,实现了一个OEWindow的中间类.

 

Q:我如何使用OEGUI?

A:这里有一个简单的示例.

http://blog.youkuaiyun.com/moonstrace/archive/2010/03/24/5410278.aspx

 

Q:OEGUI支持中文吗?

A:使用Ogre::Font的Api以及Windows消息钩子函数,OEGUI实现了中文支持.EditBox中实现了一个changeCNFont()的函数,运行中调用这个函数可以使EditBox支持中文.其他的Widget要支持中文,需要更改源代码.你可以根据EditBox的changeCNFont()函数进行对应的更改.(似乎只需要更改一个font指针相关联TextArea的指针).注意默认情况下,你需要把msyh.ttf这个字体文件拷贝到资源组中来.

 

Q:OEGUI还不完善,有必要现在就使用他?

A:我写这个介绍,希望大家能和我一起来扩充这个gui.

 

Q:OEGUI如何在现有的基础上实现扩充?

A:扩充主要是2个方面,继承Widget可以实现自己的gui组件;继承OEWindow可以实现自己的子窗口,比如对话框,聊天框,地图等等.当然,我自己写的代码也有很多不足的地方,希望大家能够一起来指正.

`Qt::WidgetAttribute` 枚举在 Qt 框架里用于定义部件(`QWidget`)的各种属性。这些属性能够控制部件的行为、外观以及与用户的交互方式。以下是对其的详细介绍: ### 常见的 `Qt::WidgetAttribute` 值及含义 #### 显示与绘制相关 - `Qt::WA_AlwaysShowToolTips`:让部件总是显示工具提示,即便它处于禁用状态。 - `Qt::WA_TranslucentBackground`:使部件的背景变为半透明,这样父部件的背景就能透过它显示出来。 - `Qt::WA_OpaquePaintEvent`:表明部件的绘制事件是不透明的,这意味着在绘制之前不需要擦除背景。 #### 焦点与输入相关 - `Qt::WA_InputMethodEnabled`:启用部件的输入法支持,允许用户使用输入法输入文本。 - `Qt::WA_KeyboardFocusChange`:部件可以通过键盘焦点的改变来接收焦点。 #### 窗口管理相关 - `Qt::WA_DeleteOnClose`:当部件关闭时,自动将其删除,释放内存。 - `Qt::WA_QuitOnClose`:当最后一个具有此属性的部件关闭时,应用程序将退出。 #### 其他属性 - `Qt::WA_Hover`:使部件能够接收悬停事件,当鼠标悬停在部件上时会触发相应的事件。 ### 代码示例 以下是一个简单的代码示例,展示了如何设置和检查 `Qt::WidgetAttribute` 属性: ```cpp #include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget widget; // 设置部件的背景为半透明 widget.setAttribute(Qt::WA_TranslucentBackground); // 检查部件是否具有半透明背景属性 if (widget.testAttribute(Qt::WA_TranslucentBackground)) { // 处理逻辑 } widget.show(); return a.exec(); } ```
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值