2011-06-17 33 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,如果你能提什麼階級,他們實際上是或許鏈接到文件,將真正幫助我們爲您解答。)

相關問題