Название: Сегфолт
Отправлено: Зайка_программист от Январь 11, 2013, 13:04
Здравствуйте! такая проблема есть treewidget на основе xml и webviewer, кнопочка. программа после нажатия на кнопочку вылетает сегфолтом Что сделала:Добавила в функцию go() Когда сегфолт: при первом нажатии на кнопку Где останавливается дебаг: QTreeWidgetItemIterator::QTreeWidgetItemIterator(QTreeWidgetItem *item, IteratorFlags flags) : d_ptr(new QTreeWidgetItemIteratorPrivate( this, qobject_cast<QTreeModel*>(item->view->model()))), current(item), flags(flags) {//стрелка вот на этой строчки Q_D(QTreeWidgetItemIterator); Q_ASSERT(item); QTreeModel *model = qobject_cast<QTreeModel*>(item->view->model()); Q_ASSERT(model); model->iterators.append(this); ........ код моей функции void MainWindow::go() { m_item=MainTreeWidget->currentItem();//если за комментировать то нет ошибки...но без этого не работает...что не так? QString path =ItemToPath[m_item]; QTreeWidgetItemIterator it(m_item); ++it; if(*it!=NULL) { m_item->setSelected(false); m_item=*it; m_item->setSelected(true); MainTreeWidget->setCurrentItem(m_item);//и эту if(m_item->isSelected()==true) { path = MainXMLFileInfo->absolutePath()+ "\\" + path; //MainWebView->load(QUrl::fromLocalFile(path)); //MainPathLabel->setText(path); } } if(*it==NULL) { wgt->show(); wgt->resize(300,100); } }//конец кнопки go
Название: Re: Сегфолт
Отправлено: carrygun от Январь 11, 2013, 13:15
Это в начало функции. C++ (Qt) m_item=MainTreeWidget->currentItem(); if (!m_item) { if (MainTreeWidget->topLevelItem(0)) m_item = MainTreeWidget->topLevelItem(0); else return; //по вкусу, можно ошибку выдавать или еще чего }
Название: Re: Сегфолт
Отправлено: Зайка_программист от Январь 11, 2013, 13:29
Заработало спасибо....но у меня все таки вопрос почему????? есть такая же программа...и там этого писать не надо....
Название: Re: Сегфолт
Отправлено: Зайка_программист от Январь 11, 2013, 13:33
Просто вот функция которая делает тоже самое... она просто в другом проекте..и там ничего такого не надо void widget::go() { m_item=twg->currentItem(); QString PathStr =ItemToPath[m_item]; QTreeWidgetItemIterator it(m_item); it++; if(*it!=NULL) { m_item->setSelected(false); m_item=*it; m_item->setSelected(true); twg->setCurrentItem(m_item); if(m_item->isSelected()!=false) { PathStr = MainXMLFileInfo->absolutePath()+ "\\" + PathStr; // web_window->load(QUrl::fromLocalFile(PathStr)); } } }
Название: Re: Сегфолт
Отправлено: carrygun от Январь 11, 2013, 13:58
Значит там currentItem() гдето устанавливается или выбирается руками или еще чего. В общем при запуске нет у тривиджета текущего элемента и он скорее всего возвращал 0.
|