我正在尝试将 QgraphicsView(QColorDialog)
小部件添加到 Palette
对话框中,但是 QGraphicsScene
对应于 QColorDialog
小部件总是空白,如果读者能帮助我纠正我的错误,那将是很大的帮助。
Qt-4.8.4-Linux(CentOS)
将包含在
PalletteDialog
中的GraphicsView
小部件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
构造函数PaletteDialog::PaletteDialog(QWidget *parent) : QDialog(parent), ui(new Ui::PaletteDialog), { //PaletteDialog sets up the ClrWidget ui->setupUi(this); ... }
最佳答案
尝试这样的事情:
setScene(new QGraphicsScene);
QColorDialog *_dialog = new QColorDialog();
_dialog->setOption(QColorDialog::NoButtons, true);
_dialog->show();
QGraphicsProxyWidget *proxyWidget = scene()->addWidget(_dialog);
并删除这一行:
proxyWidget->setWidget(_dialog);
你做错的是将一个小部件设置为 QGraphicsProxyWidget 然后调用 QGraphicsScene::addWidget(..)它做同样的事情,但那是行不通的。您可以通过调用 QGraphicsScene::addItem() 将 QGraphicsProxyWidget 添加到场景中.
例子:
setScene(new QGraphicsScene(this));
QColorDialog *_dialog = new QColorDialog;
_dialog->setOption(QColorDialog::NoButtons, true);
QGraphicsProxyWidget *proxyWidget = new QGraphicsProxyWidget;
proxyWidget->setWidget(_dialog);
scene()->addItem(proxyWidget);
关于c++ - QGraphicsScene 中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542524/