УТВЕРЖДЕНИЕ : «!d->IsWidget» в файле kernelqobject.cpp, строка 2003 (Qt Creator 5.0.2, C )

#c #qt #assert #qobject

#c #qt #утверждать #qobject

Вопрос:

Итак, у меня был этот базовый класс «Джетон». :

 class Jeton: public QPushButton{  Q_OBJECT public:  explicit Jeton(const unsigned int r, const unsigned int v, QWidget *parent = nullptr);   unsigned int getNbJetons() const{ return nbJetons;}  unsigned int getRang() const{ return rang;}  void changeNbJetons(const unsigned int nb){nbJetons = nb;}  private:  unsigned int rang;   unsigned int nbJetons;  QPixmap* imgJeton;  signals:  void jetonClicked(Jeton*);  public slots: public slots:  void clickedEvent(){ emit jetonClicked(this); } };  

И еще один класс под названием «PiocheJetons», который затем создал несколько объектов Jeton. Тем не менее, я попытался перенести это заявление :

 layoutJetons = new QVBoxLayout();   for(size_t i = 0; i lt; 6;   i){  nbJetons[i] = new QLCDNumber;  jetons[i] = new Jeton(i, 6);   nbJetons[i]-gt;display((int)jetons[i]-gt;getNbJetons());   connect(jetons[i], SIGNAL(jetonClicked(Jeton*)), this, SLOT(jetonClique(Jeton*)));   layoutJetons-gt;addWidget(jetons[i]);  layoutJetons-gt;addWidget(nbJetons[i]);  }  

Первоначально в конструкторе «PiocheJetons», в мой основной класс. Моя проблема здесь в том, что это сработало, но больше не работает и приводит к ошибке в названии этого поста.

Если вы можете мне помочь, я был бы благодарен! Спасибо,

Победитель

Комментарии:

1. Слишком мало деталей. Я думаю, что ошибка возникает во время выполнения; в этом случае какая строка вашего кода вызывает функцию, которая затем утверждает? Вы должны быть в состоянии понять это во время выполнения, глядя на стек вызовов

2. Код !d-gt;isWidget отображается только в одном месте в qobject.cpp а именно в QObject::setParent() . Это делается для того, чтобы убедиться QObject::setParent() , что виджеты не вызываются, вероятно, потому, что они должны звонить QWidget::setParent() . До сих пор остается неясным, что могло спровоцировать такую ситуацию.

3. Похоже, согласно отладчику, это this-gt;addLayout(layoutJetons) в моем главном окне… Самое странное, что, как я уже сказал, это сработало при вызове из старого конструктора PiocheJetons.