2011-06-17 27 views
1

我在我的程序中工作在Qt中。我有一个窗口小部件,我在其中放置了一个按钮和一个列表框。然后,我做了一个名为myplot的课程,该课程已完成图表绘制。然后在我的按钮事件处理函数我呼吁myplot如何让Qt图形出现在同一个窗口中?

myplot * p1 = new myplot(session,session ,24, "session"); // send arrays in argument containing the data to be plot 
    p1->show(); 
    myplot * p2 = new myplot(payload,payload ,24, "payload"); // send arrays in argument containing the data to be plot 
    p2->show(); 

的对象作为我的图形出现在新窗口中它工作正常,但我想的是,图表应出现在我的mainwidget窗口。

我所做接下来会删除我写这篇 Qt代码的我的图形窗口的标题栏:

p1->setWindowFlags(Qt::FramelessWindowHint); 
p2->setWindowFlags(Qt::FramelessWindowHint); 

现在

1)我应该怎么办放置和附加图形窗口在我的主窗口?另外,当我关闭主窗口时,我的图形窗口应该关闭。
2)当我选择从列表框中的其他值,然后单击按钮,我的旧图形消失,新的应该出现

我拖累和DROP掉一个verticlalayout然后写

ui->verticalLayout->addChildWidget(p1); 

,但得到了一个错误

/usr/include/qt4/QtGui/qlayout.h:191:错误: '无效QLayout :: addChildWidget(QWidget的*)' 被保护

然后我draaged和DROP掉一个scrollarea和写

myplot * p1 = new myplot(session,session ,24, "session"); 
p1->setWindowFlags(Qt::FramelessWindowHint); 
ui->scrollArea->addScrollBarWidget(p1,0); 
p1->show(); 

我的图表不再出现亲切指导我我是做错了还是什么的正确方法

+1

使用addWidget( ),而不是addChildWidget()。这在文档 – takoi 2011-06-17 13:34:15

+0

中有明确说明。如果你有新的问题,而不是修改旧的问题(这样所有的答案都会出错并且过时),那么你可能会问一个新的问题? – Troyseph 2015-03-02 16:11:43

回答

3

显然,myplot是QWidget中的childclass。因此,您可以在主窗口上定义布局(例如,使用QHBoxLayout),然后将这两个小部件添加到它。这会使它们在主窗口内被绘制。还要确保您将主窗口作为图的QWidget父项传递。

要更换这些图,您可以从布局中删除旧图并添加新图。但我更愿意将主窗口的图作为成员,并包含一些将使用新数据重绘的更新方法

+0

先生好心看看我问题中的变化 – sajid 2011-06-17 13:01:17

0

当您在没有像这样的父项的小部件上调用show时,它会自动包装在窗口中。你应该做的是创建一个小部件并将其添加到它的布局。请参阅QMainWindow示例,以及有关码头小部件的部分(如果这是您想要的)。

+0

先生恳请看看我问题中的变化 – sajid 2011-06-17 13:11:10

0

基本上你不需要担心他们出现的窗口,它只出现,因为他们没有其他父母。

您需要做的是在构建它们时指定父窗口小部件。

(这个答案是基于这样的假设,你的地块也QWidgets,如果你能提什么阶级,他们实际上是或许链接到文件,将真正帮助我们为您解答。)

相关问题