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

时间:2015-08-26 01:59:35

标签: c++ qt user-interface

我正在使用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);

代码就是这样的。
pianoRoll - > keyBoard - >钥匙
............... | - > pianoPlaom - > noteStript

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

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

这是一张普通的keyBoard图片,它直接放在MainWindow(左侧),另一张放在QGraphicsView(右侧)中 (我在此图片中禁用了后退键/键) https://drive.google.com/file/d/0BzYLJIsbhhuVSDFhSXRVM0dHWnM/view?usp=sharing

似乎每当钢琴平板和keyBoard被放置在QGtraphicsView中时,它都会被拧紧。
有谁知道发生了什么?我该如何解决这个问题?

Qt:5.4.1
操作系统:KUubutu 15.04 AMD64
编译:clang 3.6.0 / GCC 4.9.2

1 个答案:

答案 0 :(得分:1)

我建议使用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 );

使用代理窗口小部件进行任何转换/动画。