HOOPS/QT集成指南
创始人
2024-01-29 09:00:49

引言

以下部分,说明如何使用QtGUI工具包和HOOPS 3D应用程序框架构建应用程序。首先回顾编译/链接,然后讨论各个组件中的对象关系,然后概述正确创建和初始化对象以及启动Qt事件循环所需的编程步骤。

开发人员应该首先编译、链接和运行基本的qt_simple应用程序,作为其应用程序的起点。

qt_simple的可读源代码位于HOOPS/3dAF安装路径/demo/qt/qt_simple目录中,qt v4变体位于/demo/qt/qt_simpl目录中。
qt_simple假设你对Qt工具包、HOOPS/3dGS和HOOPS/MVO有一定的了解。

编译链接

Qt工具包的Signals and Slots机制需要一个预编译步骤来构建特殊的源文件。Qt元对象编译器(MOC)作为Qt工具包的一部分提供,必须在编译步骤之前使用。有关更多信息,请参阅Qt文档。

编译器定义

在一起编译HOOPS/Qt和HOOPS/MVO源代码时,必须有以下定义:

一般定义

IS_QT // All HOOPS/Qt applications

特定于windows系统

IS_WIN // Applications built with HOOPS/Qt for MS Windows IS_X11 // Applications built with HOOPS/Qt for UNIX 

在UNIX上使用OpenGL

USE_GLX_VISUAL // Applications built with HOOPS/Qt for UNIX that will use OpenGL; i.e., also IS_X11 

链接

HOOPS/Qt Widget提供清晰的源代码直接添加到应用程序的源代码库中。因此,没有特殊的HOOPS/Qt库可与项目链接

组件对象关系

这一部分讨论不同版本QT对象与HOOPS/3dAF组件之间的关系。使用这两个工具包构建应用程序时,最少需要使用每个组件中的以下对象。

QT

只有一个QApplication&至少QMainWindow(或派生类)

HOOPS/QT

至少一个HQWidget(您通常会创建一个从HQWidget派生的自定义Widget)

HOOPS/MVO

HBaseModel、HBaseView,一个从HBaseOperator派生的运算符类。想要实现几何体选择的应用程序还需要一个HSelectionSet对象。这些对象都由私有数据成员连接,私有数据成员采用以下方式存储指向其他对象的指针:
在这里插入图片描述

使用QT和HOOPS构建应用程序的步骤

使用面向对象的GUI框架(如Qt)编程包括创建一组对象,定义它们的连接方式、发送和接收消息的方式,然后启动框架的事件循环。使用Qt和HOOPS/3dAF构建应用程序特别需要以下步骤:

  • 创建和初始化:
    • Qt对象
    • HOOPS/Qt对象
    • HOOPS/MVO对象
  • 启动Qt事件处理循环

创建和初始化qt对象

QApplication

对于任何使用Qt的GUI应用程序,无论应用程序有多少个窗口,都只有一个QApplication对象。它可以通过QApplication.h中声明全局变量a来访问、 其必须在创建任何其他Qt对象之前被初始化。qt_simple示例在函数main()中执行此操作:

 int main( int argc, char **argv ) { ...// Create the one QApplication object QApplication * a = new QApplication(argc,argv); ...} 

Color Allocation and GUI Style

QApplication对象属性必须配置颜色分配和GUI样式。对于Qt/HOOPS应用程序,颜色分配必须设置为“ManyColor”。GUI样式用于创建Qt GUI的视觉外观和默认行为,通常选择Motif或Windows样式。

创建和初始化HOOPS/QT对象

HQApplication

应该创建一个HQApplication,使用接受指向Qt QApplication对象指针的构造函数。qt_simple示例在函数main()中执行此操作:

int main( int argc, char **argv ){...if(argc == 2) HQApplication * ha = new HQApplication(a, argv[1]);elseHQApplication * ha = new HQApplication(a);... }

HQApplication对象应创建任何Qt GUI对象,以便在初始化期间将其作为父对象。qt_simple示例在HQApplication对象通过调用其私有方法HQApplication::load()初始化时执行此操作.

HQWidget

可以根据需要创建尽可能多的HQWidget对象来实现GUI的设计。这些很可能是由顶级Qt Widget(如QMainWindow或QDialog)的构造函数创建的。qt_simple示例在HQApplication对象通过调用其私有方法HQApplication::load()初始化时执行此操作:

void HQApplication::load(const char * filename) 
{... SimpleHQWidget * my_widget = new SimpleHQWidget(qframe, "SimpleHQWidget", filename); ...}

HQDeleter

必须在应用程序代码块中声明和初始化一个全局指针。qt_simple示例在文件main.cpp中执行全局声明,并在函数main()的主体中执行初始化:

 // Create a global pointer to HOOPS/Qt class HQDeleterHQDeleter * deleter=0;int main( int argc, char **argv ){ ... // Create an HQDeleter object and initialize the global pointerdeleter = new HQDeleter(); ... } 

创建和初始化HOOPS/MVO对象

HDB

在应用程序main()函数中声明并初始化一个指向HOOPS/MVO HDB对象的全局指针。qt_simple示例示例:

 int main( int argc, char **argv ){ m_pHDB = new HDB(); m_pHDB->Init(); ...} 

HBaseModel

可以根据需要创建多个HBaseModel对象。qt_simple示例为每个SimpleHQWidget对象创建一个(即,存在HBaseModel到SimpleHQWidget对象的一对一映射),并在SimpleHQDWidget构造函数中这样做。

SimpleHQWidget::SimpleHQWidget(QWidget* parent, const char* name, const char * filename) : HQWidget( parent, name )
{ m_pHBaseModel = new HBaseModel(); m_pHBaseModel->Init(); ... 
}

HBaseView

void SimpleHQWidget::Init() 
{ m_pHView = new HBaseView(m_pHBaseModel, NULL, NULL, NULL, GetWindowId(), GetColorMap(), GetClipOverride());m_pHView->Init(); ... 
} 

HBaseOperator

HSelectionSet

启动QT事件循环

这是通过调用QApplication的方法QApplication::exec()来执行的。请参阅qt_simple示例的main()函数。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
平遥古城在哪 平遥古城基本现状 城垣恢宏,雉堞连云市井街巷,店肆林立四合院落,青砖瓦屋这里是平遥古城历经千年沧桑而古朴宛然,风姿依旧...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
平遥古城在哪 平遥古城基本现状 城垣恢宏,雉堞连云市井街巷,店肆林立四合院落,青砖瓦屋这里是平遥古城历经千年沧桑而古朴宛然,风姿依旧...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...