Название: сигналы/слоты
Отправлено: kom от Декабрь 08, 2009, 21:37
Есть функция, которая создаёт QDoubleSpinBox-ы на вкладке QTabWidget void QTabWidgetTools::CreateTabGeometryWidgets(int widNum, QVBoxLayout* pageLayout) { QHBoxLayout *xLay, *yLay, *zLay, *fiLay, *teLay; QHBoxLayout *layMisc; QVBoxLayout **vLay; QGLWidgetGeom* visLoc; CreateWidgetsSize = widNum; CreateWidgets = (QWidget**)malloc(sizeof(QWidget*) * widNum);//memory for widgets vLay = (QVBoxLayout**)malloc(sizeof(QVBoxLayout*) * widNum);//memory for layouts for (int i=0; i<widNum; i++) { CreateWidgets[i] = new QWidget; creationTab.Parall.common.xLb = new QLabel("coord. X:"); creationTab.Parall.common.xSpin = new QDoubleSpinBox; SetCoordSpinParam(creationTab.Parall.common.xSpin); xLay = new QHBoxLayout; xLay->setAlignment(Qt::AlignRight); xLay->addWidget(creationTab.Parall.common.xLb); xLay->addWidget(creationTab.Parall.common.xSpin); /* таким же образом создаются ещё 4 QDoubleSpinBox-a */ vLay[i] = new QVBoxLayout(CreateWidgets[i]); vLay[i]->addLayout(xLay); vLay[i]->addLayout(yLay); vLay[i]->addLayout(zLay); vLay[i]->addLayout(fiLay); vLay[i]->addLayout(teLay); //дальше происходит подключение слотов if(!(vis.empty())) { for (GLvecIter element = vis.begin(); element < vis.end(); element++) { visLoc = (*element); connect(creationTab.Parall.common.xSpin, SIGNAL(valueChanged(double)),visLoc,SLOT(setX(double))); connect(creationTab.Parall.common.ySpin, SIGNAL(valueChanged(double)),visLoc,SLOT(setY(double))); connect(creationTab.Parall.common.zSpin, SIGNAL(valueChanged(double)),visLoc,SLOT(setZ(double))); connect(creationTab.Parall.common.fiSpin, SIGNAL(valueChanged(double)),visLoc,SLOT(setFi(double))); connect(creationTab.Parall.common.teSpin, SIGNAL(valueChanged(double)),visLoc,SLOT(setTe(double))); } } } if (widNum>=0) // { creationTab.Parall.lengthLb = new QLabel("Length:"); creationTab.Parall.Length = new QDoubleSpinBox; SetCoordSpinParam(creationTab.Parall.Length); layMisc = new QHBoxLayout; layMisc->setAlignment(Qt::AlignRight); layMisc->addWidget(creationTab.Parall.lengthLb); layMisc->addWidget(creationTab.Parall.Length); if(!(vis.empty())) { for (GLvecIter element = vis.begin(); element < vis.end(); element++) { visLoc = (*element); connect(creationTab.Parall.Length, SIGNAL(valueChanged(double)),visLoc,SLOT(setLength(double))); } } vLay[0]->addLayout(layMisc); /* создаются ещё 2 QDoubleSpinBox-a "Width" и "Height" */ } for (int i = 0; i<widNum; i++)//заполняется вкладка QTabWidget-a { CreateWidgets[i]->setLayout(vLay[i]); pageLayout->addWidget(CreateWidgets[i]); } }
Если вектор vis не пустой, то к слотам виджетов в нём подключаются сигналы спинбоксов. В таком случае всё вроде бы хорошо работает. Но если сигналы подключаются позже(сразу после вызова функции создания спинбоксов), то виджеты вектора реагируют только на часть спинбоксов ( "Length","Width","Height"): void QTabWidgetTools::addBrowser(QGLWidgetGeom* browser) { if (browser == NULL) return; vis.push_back(browser); connect(creationTab.Parall.common.xSpin, SIGNAL(valueChanged(double)),browser,SLOT(setX(double))); connect(creationTab.Parall.common.ySpin, SIGNAL(valueChanged(double)),browser,SLOT(setY(double))); connect(creationTab.Parall.common.zSpin, SIGNAL(valueChanged(double)),browser,SLOT(setZ(double))); connect(creationTab.Parall.common.fiSpin, SIGNAL(valueChanged(double)),browser,SLOT(setFi(double))); connect(creationTab.Parall.common.teSpin, SIGNAL(valueChanged(double)),browser,SLOT(setTe(double))); connect(creationTab.Parall.Length, SIGNAL(valueChanged(double)),browser,SLOT(setLength(double))); connect(creationTab.Parall.Width, SIGNAL(valueChanged(double)),browser,SLOT(setWidth(double))); connect(creationTab.Parall.Height, SIGNAL(valueChanged(double)),browser,SLOT(setHeight(double))); }
Вот описание вектора vis: typedef QList<QGLWidgetGeom*> GLvec; typedef GLvec::iterator GLvecIter;
Кто-нибудь сталкивался с подобной проблемой? С чем это может быть связано? ???
Название: Re: сигналы/слоты
Отправлено: Dendy от Декабрь 09, 2009, 02:38
Проверьте, пишутся ли ошибки при соединения сигналов/слотов в поток вывода при старте программы.
Название: Re: сигналы/слоты
Отправлено: kom от Декабрь 09, 2009, 13:19
gdb партизански молчит при пошаговом исполнении :-X
|