[Interest] How can I subclass a QDockWidget?
Rollastre Prostrit
rollastre at gmail.com
Mon Jul 30 18:03:15 CEST 2012
Hello list.
I'm in kubuntu 12.04 with Qt 4.8.1.
I have a class called View which is a subclass of QDockWidget. In its
constructor I do this
View::View(QWidget* parent = NULL)
: QDockWidget(MainWindow::Instance())
{
setFeatures(QDockWidget::DockWidgetClosable |
QDockWidget::DockWidgetMovable);
}
if I use the following method to add a view to the main window
void QScaffy::addView(View *view)
{
view->setParent(w);
qDebug() << "adding view " << view->getViewTitle();
view->setWindowTitle(view->getViewTitle());
w->addDockWidget(Qt::LeftDockWidgetArea, view, Qt::Horizontal); //
where w is a MainWindow (subclass of QMainWindow)
}
my question is: what am I doing wrong to get a 'segmentation fault' in
qdockwidget.cpp:414?
int QDockWidgetLayout::minimumTitleWidth() const
{
QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget());
<---------------- this returns a QWidget and upon the cast q points to 0x0
if (QWidget *title = widgetForRole(TitleBar))
return pick(verticalTitleBar, title->minimumSizeHint());
QSize closeSize(0, 0);
QSize floatSize(0, 0);
if (hasFeature(q, QDockWidget::DockWidgetClosable)) {
<------------------------------------- Crash HERE
if (QLayoutItem *item = item_list[CloseButton])
closeSize = item->widget()->sizeHint();
}
if (hasFeature(q, QDockWidget::DockWidgetFloatable)) {
if (QLayoutItem *item = item_list[FloatButton])
floatSize = item->widget()->sizeHint();
}
int titleHeight = this->titleHeight();
int mw = q->style()->pixelMetric(QStyle::PM_DockWidgetTitleMargin,
0, q);
int fw = q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth,
0, q);
return pick(verticalTitleBar, closeSize)
+ pick(verticalTitleBar, floatSize)
+ titleHeight + 2*fw + 3*mw;
}
However, if my View is just a plain Widget and I manually create a
QDockWidget like this it works
void QScaffy::addView(QWidget *view)
{
QDockWidget *dock = new QDockWidget(tr("New"), w);
dock->setFeatures(QDockWidget::DockWidgetClosable |
QDockWidget::DockWidgetMovable);
dock->setWidget(view);
w->addDockWidget(Qt::LeftDockWidgetArea, dock, Qt::Horizontal);
}
Do you have any clue what is going on here?
Thanks in advance.
More information about the Interest
mailing list