[Qt-interest] Shared data issue

Pritam Ghanghas pritam_ghanghas at infosys.com
Tue Jul 13 10:45:24 CEST 2010


Use debugger to get a trace and see what has gone wrong when it crashed.
May be you are doing something wrong in setSwapFlag() call itself.

PS: Q_ASSERT(sharedData) is more readable. Not that it affects anything
in your case. Just a suggestion.

On Tue, 2010-07-13 at 12:57 +0530, Sajjad wrote:
> Hello forum,
> 
> I have a class whose data will be shared among several widgets within
> the main window. So i have created a singleton of that shared class. I
> have also declared several public slots to set  values for those data.
> The format of the class is as follows:
> 
> *************************************
> class SharedWidgetData : public QObject
> {
>     Q_OBJECT
> 
> public:
>     SharedWidgetData(  QObject *parent = 0 );
> 
>     ~SharedWidgetData();
> 
> signals:
> 
>     void modelMatrixChanged(const GLdouble*);
>     void projectionMatrixChanged(const GLdouble*);
>     void inversionMatrixChanged(const GLdouble*);
> 
> public slots:
> 
>     void setModelViewMatrix(const GLdouble*);
>     void setProjectionMatrix(const GLdouble*);
>     void setInverseMatrix(const GLdouble*);
> 
>     void setSwapFlag(bool);
>     void setWorldDrawFlag(bool);
> 
> public:
> 
>     GLdouble modelViewMatrix[16];
>     GLdouble projectionMatrix[16];
>     GLdouble invertedMatrix[16];
> 
> 
>     GLboolean world_draw;
> 
>     GLboolean swapped;
> 
>     //contiainer to hold the contents of the xml file
>     QMap<int,Cell*>  cellMap;
> 
> 
>     XmlStreamReader *dataReader;
> 
> };
> 
> *************************************
> 
> 
> From the main window i am sending the instance of that singleton
> shared data object pointer to all  the widgets that will access and
> updates its data as follows:
> 
> *************************************
> 
>     setupUi(this);
> 
>     //create a singleton object of the shared widget data
>     Singleton<SharedWidgetData>::init(new SharedWidgetData());
> 
>     //send the single shared instance to all  the widgets that will be
> accessing
>     //the shared data
> 
> WorldSpaceViewWidget->setSharedDataInstance(Singleton<SharedWidgetData>::getPtr());
> 
> ScreenSpaceViewWidget->setSharedDataInstance(Singleton<SharedWidgetData>::getPtr());
> 
> groupBoxCommandView->setSharedDataInstanceGroupBox(Singleton<SharedWidgetData>::getPtr());
> 
> *************************************
> 
> 
> Now the groupBoxCommandView has been promoted to another class to
> enable context menu option with that group box. Inside the context
> menu have several actions defined and one of the actions is
> triggerring a signal that will call the corresponding slot in the
> shared widget object. The connection is established as follows:
> 
> ************************************
> 
> void GroupBoxCommandExtendedBox::createActions()
> {
>     swapAction = new QAction(tr("&Swap translate/rotate"),this);
>     swapAction->setStatusTip(tr("Swap  the glTranslate and the
> glRotate command"));
>     swapAction->setCheckable(true);
> 
> 
> connect(swapAction,SIGNAL(triggered(bool)),pSharedData,SLOT(setSwapFlag(bool)));
> 
> 
>     resetAction = new QAction(tr("Reset the command
> parameters"),this);
>     resetAction->setStatusTip(tr("Reset the command parameters to
> initial values"));
> }
> 
> 
> ************************************
> 
> 
> The program crashes on the above connection. Is that possible to have
> a non-checkable context menu and still manage to send a boolean to the
> slot?
> 
> And any idea why it have crashed?
> 
> I have put an assertion while initializing the pSharedData, so that it
> does not point to NULL. I have done this as follows:
> 
> ****************************************
> void
> GroupBoxCommandExtendedBox::setSharedDataInstanceGroupBox(SharedWidgetData *sharedData)
> {
>     Q_ASSERT(sharedData != NULL);
>     pSharedData = sharedData;
> }
> 
> ****************************************
> 
> 
> Is there anything i missed in the process or i have not elaborated
> enough ? 
> 
> 
> Please let me know any of you suggestion on this issue.
> 
> 
> Regards
> Sajjad




More information about the Qt-interest-old mailing list