• 7079阅读
  • 14回复

[提问]Qt如何能使图在本窗口内显示而不在新窗口中显示,具体如下 [复制链接]

上一主题 下一主题
离线angmar
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-10
我已经完成了一个类ST,里面是坐标图,ST.h和ST.cpp都已完成。
widget.h如下
#ifndef WIDGET_H
#define WIDGET_H
#include "ST.h"
#include "qpushbutton.h"
#include <Widget>
#include <QHBoxlayout>
namespace Ui{
class Widget;
}
class Widget:public QWidget
{
     Q_OBJECT
public:
     explicit Widget(QWidget*parent=0);
     ~Widget();
public slots:
      void st();
private:
      Ui::Widget*ui;
      ST m;
};
#endif // WIDGET


widget.cpp如下
#include "widget.h"
#include "ui_widget.h"
#include <QGui>

Widget::Widget(QWidget*parent):
     QWidget(parent),
     ui(new Ui::Widget)
{
      ui->setupUi(this);
      QPushButton*st=new QPushButton;
      QGraphicsView*g=new QGrahicsView;
      QHBoxlayout*layout=new QHBoxlayout;
      layout->addWidget(st);
      layout->addWidget(g);
      setLayout(layout);
      connect(st,SIGNAL(clicked()),this,SLOT(st()));
}  
Widget::~Widget()
{
      delete ui;
}
void Widget::st()
{
      m.show();
}
该程序运行是点击pushbutton st时会显示类ST中的坐标图,但是现在运行结果是点击st后,会跳出一个新窗口显示ST中的图,怎么样改变能使ST中的图显示在g中呢,求高手指点,实在不行使ST中的图显示在界面上也行,我可以改变其坐标尺寸让其适应。
离线benbenmajia

只看该作者 1楼 发表于: 2012-05-10
m是个窗体类的对象~
安然.....
离线angmar
只看该作者 2楼 发表于: 2012-05-10
有什么办法让它显示在主界面上吗,不想弹出新窗口
离线roywillow

只看该作者 3楼 发表于: 2012-05-10
因为那个m没有设置parent,自然就被当做一个独立的窗口了
如果你只是想让它成为窗口的一部分,最好不要这样直接把它声明为成员变量
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线angmar
只看该作者 4楼 发表于: 2012-05-10
求高手指教,我应该怎么声明,谢谢了,本人有点迟钝,希望能具体说一下
离线passion_wu
只看该作者 5楼 发表于: 2012-05-10
可以直接把ST 放在Widget中的ui中:
1,在Widget的ui设计窗体中先放一个ST的基类控件
2,然后右键点击这个控件,选择Promote to...命令
3,在Promoted Widget窗口中完成promote操作
这样该控件的类名就变成ST了。
如果你想点击button之后再显示st的话,就先隐藏嘛,点击button之后显示。
离线angmar
只看该作者 6楼 发表于: 2012-05-10
我是直接写程序啊,希望能在程序上改
离线angmar
只看该作者 7楼 发表于: 2012-05-10
回 3楼(roywillow) 的帖子
能详细说说该怎么改吗,谢谢了
离线roywillow

只看该作者 8楼 发表于: 2012-05-10
看例子、教程,看看他们一般是怎么来声明一个窗口内的组件的
我觉得直接说出来没啥意思……当时我也因为类似的问题纠结了一下,但是搞清楚之后就大彻大悟了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线angmar
只看该作者 9楼 发表于: 2012-05-10
回 8楼(roywillow) 的帖子
其实,如果看例子、教程,能找到解决方法我就不用来这里求教了,这个问题我已经纠结了2天了,网上找资料,看书都做了,但毕竟只是初学者啊,而且目前时间很紧急,就算是例子我也没找到多少啊,尤其是我需要的。当然我要做的比这个要求更多,我现在只是提出简化的程序就问题提出来,不弄懂的话也编不下去
离线dongchen
只看该作者 10楼 发表于: 2012-05-11
我也是新手,不过我觉得5楼说的很不错。首先我的你问题的理解为你想在 QGraphicsView*g=new QGrahicsView中显示你的坐标图。如果是这样的话,你可以先看看QGraphicsView类的相关成员。有没有哪一项设置了GrahicsView的显示。这个就和窗口的设置中心窗口类似。
离线roywillow

只看该作者 11楼 发表于: 2012-05-11
回 9楼(angmar) 的帖子
还不是很清楚ST类的构造
如果是QWidget的子类的话,可在Widget中只声明ST* m,构造时m=new ST(g), 即以那个g为parent, 这样应该就可以让m成为g内的一个组件了
这不就是界面创建时的方法吗?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线angmar
只看该作者 12楼 发表于: 2012-05-11
回 11楼(roywillow) 的帖子
对,ST就是QWidget的子类,谢谢前辈了,我去试试
离线angmar
只看该作者 13楼 发表于: 2012-05-11
回 11楼(roywillow) 的帖子
问题解决了,谢谢
离线shiziyang

只看该作者 14楼 发表于: 2012-05-11
(m中的窗体)->setParent(this)
快速回复
限100 字节
 
上一个 下一个