我正在尝试将一个QgraphicsView(QColorDialog)小部件添加到Palette对话框中,但是QGraphicsScene与该小部件相对应的QColorDialog始终是空白,如果读者能够帮助我纠正我的错误,那将会有很大的帮助。
Qt-4.8.4-Linux(CentOS)
GraphicsView将包含在的小部件PalletteDialog
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());
}
Run Code Online (Sandbox Code Playgroud)PaletteDialog构造函数
PaletteDialog::PaletteDialog(QWidget *parent)
: QDialog(parent),
ui(new Ui::PaletteDialog),
{
//PaletteDialog sets up the ClrWidget
ui->setupUi(this);
...
}
Run Code Online (Sandbox Code Playgroud)尝试这样的事情:
setScene(new QGraphicsScene);
QColorDialog *_dialog = new QColorDialog();
_dialog->setOption(QColorDialog::NoButtons, true);
_dialog->show();
QGraphicsProxyWidget *proxyWidget = scene()->addWidget(_dialog);
Run Code Online (Sandbox Code Playgroud)
并删除这一行:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9456 次 |
| 最近记录: |