Die Widgets in einer QGraphicsScene
Ich versuche, fügen Sie ein QgraphicsView(QColorDialog)
widget auf einen Palette
dialog, aber die QGraphicsScene
entsprechend der QColorDialog
widget ist immer leer, und es wäre eine große Hilfe, wenn Leser könnte mir helfen, korrigieren meine Fehler.
Qt-4.8.4-Linux(CentOS)
-
Den
GraphicsView
widget wird in diePalletteDialog
ClrWidget::ClrWidget(QWidget *parent) : QGraphicsView(parent) { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setFrameStyle(QFrame::NoFrame); setScene(new QGraphicsScene(this)); _dialog = new QColorDialog(); _dialog->setOption(QColorDialog::NoButtons, true); setMinimumSize(_dialog->size()); setMaximumSize(_dialog->size()); QGraphicsProxyWidget *proxyWidget = new QGraphicsProxyWidget(); proxyWidget->setWidget(_dialog); //scene()->addItem(proxyWidget); //scene()->setSceneRect(proxyWidget->geometry()); scene()->addWidget(_dialog); scene()->setSceneRect(_dialog->geometry()); }
-
PaletteDialog
KonstruktorPaletteDialog::PaletteDialog(QWidget *parent) : QDialog(parent), ui(new Ui::PaletteDialog), { //PaletteDialog sets up the ClrWidget ui->setupUi(this); ... }
- fügen Sie die _dialog widget, um die Szene, aber wo stellen Sie die position des widgets (in der Szene), wenn es Hinzugefügt wurde? Auch in der Vergangenheit habe ich gefunden, dass es Probleme mit QGraphicsProxyWidget mit einigen widgets. Versuchen Sie, ein QGraphicsRectItem, um die Szene und sehen Sie, wenn angezeigt wird, wo Sie erwarten, dass die proxy-widget.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Probieren Sie etwas wie dieses:
Und entfernen Sie diese Zeile:
proxyWidget->setWidget(_dialog);
Was Sie falsch gemacht haben war, legen Sie ein widget auf einer QGraphicsProxyWidget und rief dann QGraphicsScene::addWidget(..) die nicht die gleiche Sache, und das funktioniert nicht. Sie können Ihren QGraphicsProxyWidget der Szene aber durch den Aufruf QGraphicsScene::addItem().
Beispiel:
Beim erstellen einer
QGraphicsScene
ich in der Regel fügen Sie alle widgets, um die Szene vor dem AufrufQGraphicsView::setScene(scene)
. Sie können entfernen Sie den Aufrufscene()->setSceneRect()
in diesem Fall, weil es automatisch definiert werden, indem die geometrie der widgets, die es enthält. Der geänderte code würde wie folgt Aussehen:setSceneRect()
muss nicht genannt werden. Im original-code, es wird aufgerufen mit der geometrie der_dialog
könnteQRect(0,0,0,0)
... daher wird nichts angezeigt.