2015-08-26 190 views
0

我正在使用C++和Qt編寫音樂/ MIDI編輯器。
開發順利。直到我遇到一個問題,QGraphicsView渲染怪異與它的子部件的子部件。
(哇,這是混淆)QGraphicsView渲染它的子窗口小部件的子窗口小部件

這是我用我的子控件添加到一個的QGraphicsView

pianoPlain = new QawPianoPlain(); 
keyBoard = new QawPianoKeyBoard(); 
scene->addWidget(pianoPlain); 
scene->addWidget(keyBoard); 


keyBoard->setGeometry(0,0,100,540); 
keyBoard->setKeyNum(36); 

pianoPlain->setGeometry(100,0,500,540); 
pianoPlain->setStriptNum(36); 

該代碼使得像這樣的代碼。
pianoRoll - >鍵盤 - >鍵
............... | - > pianoPlaom - > noteStript

凡pianoPlain和鍵盤類從GraphicsView和關鍵我繼承和noteStript都是從QWidget繼承的。

這是一個發生了什麼的圖片。 https://drive.google.com/file/d/0BzYLJIsbhhuVZ0RMdzRqV01Cd2M/view?usp=sharing

這是其被放置directy在主窗口(左)和scrooed向上一個放置在的QGraphicsView(右)
(I具有禁用回/儘管在該圖像鍵) https://drive.google.com/file/d/0BzYLJIsbhhuVSDFhSXRVM0dHWnM/view?usp=sharing普通鍵盤的圖像

似乎只要將pianoPlain和keyBoard放置在QGtraphicsView中。我不會被吝嗇。
任何人都知道最新情況?我怎麼能解決這個問題?

的Qt 5.4.1
OS:KUubutu 15.04 AMD64
編譯:calng 3.6.0/4.9.2 GCC

+0

只是爲了澄清,你是否將'QGraphicsView'小部件作爲項添加到'QGraphicsScene'! – cmannett85

+0

是的,我將我的小部件添加到場景中。 (因爲有一個addWidget,爲什麼不呢?)這就是爲什麼事情出錯了? –

+0

要麼場景不能正確地適應您的渲染項目,要麼您的子小部件代碼可能有錯誤。我建議創建一個示例子小部件並將其添加到場景中,以測試它是否與場景的佈局有關或與子小部件有關。 – Poriferous

回答

1

我建議pianoPlain和鍵盤應該使用繼承的QGraphicsItem一類 - 例如QGraphicsPixmapItem或QGraphicsProxyWidget。

然後,您可以使用場景 - > addWidget()方法將這些添加到場景中。

場景本身應該成爲QGraphicsView的一部分。

例如:

QGraphicsView *view = new QGraphicsView(); 
QGraphicsScene* scene = new QGraphicsScene(view); 

view->setScene(scene_); 

// No need to parent these 
pianoPlain = new QawPianoPlain(); 
keyBoard = new QawPianoKeyBoard(); 

// This will work if QawPianoPlain and QawPianoKeyBoard inherit QWidget 
QGraphicsProxyWidget* pianoProxy = scene_->addWidget(pianoPlain); 
QGraphicsProxyWidget* keyBoardProxy = scene_->addWidget(keyBoard); 

使用代理插件進行任何轉換/動畫。

+0

不,我沒有做任何轉換/動畫。我只是將小部件添加到QGraphicsView,其中QGraphicsView是另一個QGraphicsView場景的子部件。 在這種情況下。即使是普通的舊QPushButton也不能正確渲染。 –

相關問題