QGraphicsView奇怪地渲染其子小部件的子小部件

QGraphicsView rendering its sub widget's sub widget weirdly

本文关键字:小部 QGraphicsView      更新时间:2023-10-16

我正在使用c++和Qt开发一个音乐/MIDI编辑器。
开发是顺利的,直到我遇到一个问题,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);

代码是这样的:
piano -> keyBoard -> key
...............|-> pianoplom -> notestripe

pianoPlain和keyBoard是我从GraphicsView继承的类,key和noteStript都是从QWidget继承的。

下面是发生的事情的图片:https://drive.google.com/file/d/0BzYLJIsbhhuVZ0RMdzRqV01Cd2M/view?usp=sharing

这是一个普通键盘的图片,它直接放在MainWindow(左)和一个扭曲的键盘放在QGraphicsView(右)
(我在这张图片中禁用了返回/while键)https://drive.google.com/file/d/0BzYLJIsbhhuVSDFhSXRVM0dHWnM/view?usp=sharing

似乎无论何时pianoPlain和keyBoard被放置在QGtraphicsView中,它都会被拧。
有人知道发生了什么吗?我该如何解决这个问题?

Qt: 5.4.1
OS: KUubutu 15.04 AMD64
clang 3.6.0/GCC 4.9.2

我建议pianoPlain和keyBoard应该使用继承QGraphicsItem的类-例如QGraphicsPixmapItem或QGraphicsProxyWidget。

然后使用scene->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 );

为任何转换/动画使用代理小部件