[Interest] type casting 5 levels down no error but not proper

Sujan Dasmahapatra sdh at lmwindpower.com
Tue Apr 24 14:42:57 CEST 2012


Thanks Diego and Konstantin for your valuable inputs. I am now doing
qobject_cast for all of them, please check the code snippet below, now
it's crashing at tabWid step. It's giving QASSERT failure. The failure
is happening in the following file

 

//qscopedpointer.h at the following line QASSERT(d)

  inline T *operator->() const

    {

        Q_ASSERT(d); //this line it's crashing.

        return d;

    }

 

[code]

QWidget *wid  = qobject_cast<QWidget *>(parent());

CSheet *sheet = qobject _cast<CSheet *>(wid->parent());

QScrollBar *scrollBar = qobject _cast<QScrollBar *>(sheet->parent());

CTabWidget *tabWid = qobject _cast<CTabWidget *>(scrollBar->parent());
// Here it is crashing, QSSERT(d)  failure

CDataPage  *dataPage = qobject _cast<CDataPage *>(tabWid->parent());

MainWindow *mainwin = qobject _cast<MainWindow *>(dataPage->parent());

mainwin->statusBar()->showMessage(tr("A new plot being added!!"),5000);

[/code]

 

CTabWidget is a custom class derived from QTabWidget.

 

Please help me getting the mainwindow handle.  Thanks for your reply.

 

 

 

 

From: Diego Iastrubni [mailto:diegoiast at gmail.com] 
Sent: Tuesday, April 24, 2012 5:41 PM
To: Sujan Dasmahapatra
Cc: interest at qt-project.org
Subject: Re: [Interest] type casting 5 levels down no error but not
proper

 

 

On Tue, Apr 24, 2012 at 2:58 PM, Sujan Dasmahapatra
<sdh at lmwindpower.com> wrote:

please check the code snippet below:

 

[code]

QWidget *wid  = reinterpret_cast<QWidget *>(parent());

CSheet *sheet = reinterpret_cast<CSheet *>(wid->parent());

QScrollBar *scrollBar = reinterpret_cast<QScrollBar *>(sheet->parent());

CTabWidget *tabWid = reinterpret_cast<CTabWidget
*>(scrollBar->parent());

CDataPage  *dataPage = reinterpret_cast<CDataPage *>(tabWid->parent());

MainWindow *mainwin = reinterpret_cast<MainWindow
*>(dataPage->parent());

mainwin->statusBar()->showMessage(tr("A new plot being added!!"),5000);
//[I][SIZE=7]Here it is crashing[/SIZE][/I]

[/code]

 

 

You meant 

 

[code]

MainWindow *mainwin = dynamic_cast<MainWindow>(dataPage->parent());

if (mainwin!=NULL) {

   // do your thing

}

[/code]

 

Or use qobject_cast as recommended. This will be faster then
dynamic_cast.

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20120424/146a4358/attachment.html>


More information about the Interest mailing list