class MainWindow : public QMainWindow
{ Q_OBJECT public: MainWindow(QWidget parent=0); }; class CDataPage : public QDialog { Q_OBJECT public: CDataPage(MainWindow *parent=0); } class CTabWidget : public QTabWidget { Q_OBJECT public: CTabWidget(CDataPage *parent=0); } ; CTabWidget::CTabWidget(CDataPage *parent) : QTabWidget(parent) { } class CSheet : public QWidget { Q_OBJECT Public: CSheet(CTabWidget *parent=0); ~CSheet(); }; CSheet::CSheet(CTabWidget *parent) : QWidget(parent) { } MainWindow *mainwin = new MainWindow; CDataPage *dataPage = new CDataPage(mainwin); CTabWidget *tabWid = new CTabWidget(dataPage); CSheet *sheet = new CSheet(tabWid); Is this correct type castting??? MainWindow *mainwinhandle = qobject_cast<MainWindow * >( sheet->parent()->parent()->dataPage()->parent())->statusBar()->showMessa ge(tr("A new plot being added"),5000); It's crashing... From: Carel Combrink [mailto:carel.combr...@gmail.com] Sent: Wednesday, April 25, 2012 12:42 PM To: Sujan Dasmahapatra Cc: interest@qt-project.org Subject: Re: [Interest] type casting 5 levels down no error but not proper If your requirement is " Please help me getting the mainwindow handle " then try something like this: bool continueSearching = true; QWidget* widgetParent = NULL; QMainWindow* mainWindow = NULL; QWidget* currentWidget = this; while(continueSearching == true) { widgetParent = qobject_cast<QWidget*>(currentWidget->parent()); if(widgetParent != NULL) { currentWidget = widgetParent; mainWindow = qobject_cast<QMainWindow*>(currentWidget); if(mainWindow != NULL) { continueSearching = false; } } else { continueSearching = false; } } if(mainWindow != NULL) { mainWindow->statusBar()->showMessage(tr("A new plot being added!!"),5000); } The idea is to loop through all of the parents of the widgets until one is a QMainWindow. The other approaches can also work like a global mainwindow or something. This can be used to get the QMainWindow of any QWidget. Note: I have briefly tested it and it seems to work. It might have problems but the basic idea is there. Regards, On Tue, Apr 24, 2012 at 2:42 PM, Sujan Dasmahapatra <s...@lmwindpower.com> wrote: 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:diegoi...@gmail.com] Sent: Tuesday, April 24, 2012 5:41 PM To: Sujan Dasmahapatra Cc: interest@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 <s...@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. _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest