查看: 2120|回复: 4

求助:改造osgviewerqt例子后,程序运行不了了。

[复制链接]

该用户从未签到

发表于 2009-10-23 08:57:33 | 显示全部楼层 |阅读模式
本帖最后由 bdbox 于 2009-10-23 09:00 编辑

以下是我改造的,集成在自己写的qt应用程序中:
MyWidget.h文件:

  1. #include <QtCore/QString>
  2. #include <QtCore/QTimer>
  3. #include <QtGui/QKeyEvent>
  4. #include <QtGui/QApplication>
  5. #include <QtOpenGL/QGLWidget>
  6. #include <QtGui/QMainWindow>
  7. #include <QtGui/QMdiSubWindow>
  8. #include <QtGui/QMdiArea>
  9. #include <QtGui/QHBoxLayout>
  10. class MyWidget : public QWidget
  11. {
  12. public:
  13. MyWidget(QWidget *parent);
  14. };
复制代码
AdapterWidget.cpp文件改造部分:

  1. ...
  2. #include "MyWidget.h"
  3. ...
  4. MyWidget::MyWidget(QWidget *parent = 0)
  5. {
  6.     setGeometry(100, 100, 800, 600);
  7.     osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cow.osg");
  8.     ViewerQT *viewerWindow = new ViewerQT;
  9.     viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
  10.     viewerWindow->setSceneData(loadedModel.get());
  11.     QHBoxLayout *mainLayout = new QHBoxLayout;
  12.     mainLayout->addWidget(viewerWindow);
  13.     setLayout(mainLayout);
  14. }
  15. ...
复制代码
调用部分:

  1. #include "qttest7.h"
  2. #include "MyWidget.h"
  3. QtTest7:tTest7(QWidget *parent, Qt::WFlags flags)
  4. : QMainWindow(parent, flags)
  5. {
  6. ui.setupUi(this);
  7. MyWidget* widget = new MyWidget();
  8. //ui.centralWidget = widget;
  9. }
  10. QtTest7::~QtTest7()
  11. {
  12. }
复制代码
当运行到MyWidget* widget = new MyWidget();时程序自动退出。没有报错。调试进去是:ViewerQT *viewerWindow = new ViewerQT;句就自动退出了。

谢谢~!

该用户从未签到

发表于 2009-10-23 10:07:40 | 显示全部楼层
  1. MyWidget::MyWidget(QWidget *parent = 0)
  2. : QWidget(parent)
  3. {
  4.     ...
  5. }
复制代码
看一看Qt的基本例子会对您很有好处

该用户从未签到

 楼主| 发表于 2009-10-23 11:08:16 | 显示全部楼层
2# array


谢谢array老大。

倒也看了很多遍了,可能还没有参透。

按array老大的提示修改还是不行。

源码上传上来。有兴趣的朋友看下。(将rar改为7z,然后解压)

QtTest7.rar

14.07 KB, 下载次数: 170, 下载积分: 威望 1

该用户从未签到

发表于 2009-10-23 12:46:55 | 显示全部楼层
主函数里面的widget->show()呢?这个没有,当然什么都不会显示;您似乎需要先恶补一下Qt的基本知识

该用户从未签到

 楼主| 发表于 2009-10-23 13:06:06 | 显示全部楼层
本帖最后由 bdbox 于 2009-10-23 13:08 编辑

谢谢array老大,可能是我没有描述清楚。
  1. #include "qttest7.h"
  2. #include "MyWidget.h"

  3. #include <QPushButton>
  4. #include <QHBoxLayout>

  5. QtTest7::QtTest7(QWidget *parent, Qt::WFlags flags)
  6. : QMainWindow(parent, flags)
  7. {
  8. ui.setupUi(this);

  9. //QPushButton *button = new QPushButton("Quit");

  10. MyWidget* widget = new MyWidget();

  11. ui.horizontalLayout->addWidget(widget);
  12. }

  13. QtTest7::~QtTest7()
  14. {

  15. }
复制代码

我是将mywidget作为一个widget加到

ui.horizontalLayout->addWidget(widget);

问题并不是出在这里,而是在这一句: MyWidget* widget = new MyWidget(); 的时候就已经自动退出去了。

若换成
QPushButton *button = new QPushButton("Quit");
//MyWidget* widget = new MyWidget();
ui.horizontalLayout->addWidget(button); 这是没有问题的:
gg.gif

非常感谢 array 的提示: “您似乎需要先恶补一下Qt的基本知识”

-----------正在恶补中...很恶很恶的在补...~呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表