diff --git a/qcd_utils/pult/cddirectk.cpp b/qcd_utils/pult/cddirectk.cpp index 6846ce9..7f63c5d 100644 --- a/qcd_utils/pult/cddirectk.cpp +++ b/qcd_utils/pult/cddirectk.cpp @@ -48,7 +48,9 @@ void KDockWidget::addK(const CDType & t, CDDirectKTypeDialog::TypeInfo ti) { if (k_list.contains(xp)) return; k_list << xp; info_list << ti; + //piCout << "add" << xp; QWidget * ve = ti.create(); + //qDebug() << "add" << ve; lay->addRow(PI2QString(t.pathString().join(".")) + ":", ve); QCDCore::instance()->bindWidget(ve, t); //ve->setValue(); @@ -94,7 +96,9 @@ void KDockWidget::clear() { void KDockWidget::changedGlobal() { + piCout << "changedGlobal ..." << k_list.size_s() << info_list.size() << lay->count() << lay->rowCount(); for (int i = 0; i < k_list.size_s(); ++i) { + piCout << "update" << i << "0"; if (!K.exists(k_list[i])) { k_list.remove(i); info_list.remove(i); @@ -102,9 +106,13 @@ void KDockWidget::changedGlobal() { --i; continue; } + piCout << "update" << i << "1"; QLabel * lbl = qobject_cast(lay->itemAt(i, QFormLayout::LabelRole)->widget()); + piCout << "update" << i << "2"; if (lbl) lbl->setText(PI2QString(K[k_list[i]].pathString().join(".")) + ":"); + piCout << "update" << i << "3"; } + piCout << "changedGlobal ok"; } @@ -131,6 +139,8 @@ bool KDockWidget::eventFilter(QObject * o, QEvent * e) { if (k.type().left(1) == "n" || k.type().left(1) == "f") { if (type_dialog->exec() == QDialog::Accepted) ti = type_dialog->getType(); + else + return true; } addK(k, ti); de->accept(); @@ -165,10 +175,17 @@ void KDockWidget::contextMenuEvent(QContextMenuEvent * e) { void KDockWidget::removeRow(int r) { if (r < 0 || r >= lay->rowCount()) return; - QLayoutItem * i = lay->takeAt(r+r); - if (i) {delete i->widget(); delete i;} - i = lay->takeAt(r+r); - if (i) {delete i->widget(); delete i;} +#if QT_VERSION >= 0x050800 + QFormLayout::TakeRowResult rr = lay->takeRow(r); + if (rr.fieldItem) {delete rr.fieldItem->widget(); delete rr.fieldItem;} + if (rr.labelItem) {delete rr.labelItem->widget(); delete rr.labelItem;} +#else + piForTimes (2) { + QLayoutItem * i = lay->itemAt(r+r); + lay->removeItem(i); + if (i) {delete i->widget(); delete i;} + } +#endif } diff --git a/qcd_utils/qcd_core.cpp b/qcd_utils/qcd_core.cpp index 8e09976..c77e70e 100644 --- a/qcd_utils/qcd_core.cpp +++ b/qcd_utils/qcd_core.cpp @@ -151,6 +151,7 @@ bool QCDCore::bindWidget(QWidget * w) { bool QCDCore::bindWidget(QWidget * w, const CDType & k) { if (!w) return false; + //piCout << "bind..." << k.name() << k.path(); QString cn = w->metaObject()->className(); bool ok = false; if (cn == "QCheckBox" || cn == "QGroupBox") { @@ -179,7 +180,7 @@ bool QCDCore::bindWidget(QWidget * w, const CDType & k) { connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(slotDestroyed(QObject*)), Qt::UniqueConnection); setWidgetValue(w, k); if (!ok) return false; - //piCout << k.name() << k.path(); + //piCout << k.name() << k.path() << "ok"; binded_widgets.insert(w, k.path()); return true; } @@ -252,6 +253,7 @@ int QCDCore::unbindWidgets(QList wl) { bool QCDCore::unbindWidget(QWidget * w) { if (!w) return false; + //qDebug() << "unbind" << w; if (!binded_widgets.contains(w)) return false; QString cn = w->metaObject()->className(); if (cn == "QCheckBox" || cn == "QGroupBox") @@ -264,13 +266,16 @@ bool QCDCore::unbindWidget(QWidget * w) { disconnect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString))); if (cn == "QVariantEdit") disconnect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant))); + //qDebug() << "remove b" << binded_widgets.size(); binded_widgets.remove(w); + //qDebug() << "remove a" << binded_widgets.size(); return true; } void QCDCore::unbindAllWidgets() { - QMapIterator > it(binded_widgets); + QMap > bwm = binded_widgets; + QMapIterator > it(bwm); while (it.hasNext()) { QWidget * w = it.next().key(); unbindWidget(w);