Russian Qt Forum
Сентябрь 30, 2024, 20:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сегфолт  (Прочитано 3338 раз)
Зайка_программист
Гость
« : Январь 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
Записан
carrygun
Гость
« Ответ #1 : Январь 11, 2013, 13:15 »

Это в начало функции.

Код
C++ (Qt)
m_item=MainTreeWidget->currentItem();
if (!m_item) {
   if (MainTreeWidget->topLevelItem(0))
       m_item = MainTreeWidget->topLevelItem(0);
   else
       return; //по вкусу, можно ошибку выдавать или еще чего
}
 
Записан
Зайка_программист
Гость
« Ответ #2 : Январь 11, 2013, 13:29 »

Заработало спасибо....но у меня все таки вопрос почему?Непонимающий?
есть такая же программа...и там этого писать не надо....
Записан
Зайка_программист
Гость
« Ответ #3 : Январь 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));
 
           }
 
        }
 
}
Записан
carrygun
Гость
« Ответ #4 : Январь 11, 2013, 13:58 »

Значит там currentItem() гдето устанавливается или выбирается руками или еще чего. В общем при запуске нет у тривиджета текущего элемента и он скорее всего возвращал 0.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.166 секунд. Запросов: 21.