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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как передвигаться по элементам treeWidget  (Прочитано 2611 раз)
Зайка_программист
Гость
« : Январь 10, 2013, 13:15 »

Есть такая задача:
есть дерево(treewidget на основе xml), браузер(webViewer).
Нужно сделать так, чтобы при нажатии на кнопку сдвигаться вниз и чтобы в браузере открывался соответствующий документ(ссылка в атрибуте тега xml)
Вот что сделала я:


Код:
...
m_item=twg->invisibleRootItem();//тут получает root
...
 }
void widget::go()
{
 
 
 
m_item=twg->currentItem();//тут получается на входе root а после строчки уже текущий элемент
    QString path =ItemToPath[m_item];//и получается что эта строчка эквивалентна  QString path =ItemToPath[twg->currentItem]
 
        QTreeWidgetItemIterator it(m_item);
 
    ++it;
 
        if(*it!=NULL)
        {
            m_item->setSelected(false);
            m_item=*it;
            m_item->setSelected(true);
            if(m_item->isSelected()==true)
            {
                path = MainXMLFileInfo->absolutePath()+ "\\" + path;
 
 
                //web_window->load(QUrl::fromLocalFile(path));
                l->setText(path);
            }
 
        }

Вопрос почему он перестал шагать?
Делает один шаг и все((а дальше начинает шагать только после клика((
Подскажите пожалуйста в каком направлении идти..документацию читаю, но там особо ничего путного нет(
Записан
carrygun
Гость
« Ответ #1 : Январь 10, 2013, 13:23 »

Если по клику "он должен прошагать по всем" то нужен цикл. Как раз в документации пример с циклом while.
Записан
Зайка_программист
Гость
« Ответ #2 : Январь 10, 2013, 13:34 »

Не со всем так схема такая:
нажать на кнопку-сдвинутся вниз-нажать-сдвинутся и тд)

Если так то он ходит по клику, но со сдвигом на один вперед
Код:
void widget::go()
{



    QString path =ItemToPath[m_item];

        QTreeWidgetItemIterator it(m_item);


it++;
        if(*it!=NULL)
        {
            m_item->setSelected(false);
            m_item=*it;
            m_item->setSelected(true);
            if(m_item->isSelected()==true)
            {
                path = MainXMLFileInfo->absolutePath()+ "\\" + path;


                //web_window->load(QUrl::fromLocalFile(path));
                l->setText(path);
            }

        }

}

а если добавить
Код:
void widget::go()
{



[b]m_item=twg->currentItem();[/b]
    QString path =ItemToPath[m_item];

        QTreeWidgetItemIterator it(m_item);


it++;
        if(*it!=NULL)
        {
            m_item->setSelected(false);
            m_item=*it;
            m_item->setSelected(true);
            if(m_item->isSelected()==true)
            {
                path = MainXMLFileInfo->absolutePath()+ "\\" + path;


                //web_window->load(QUrl::fromLocalFile(path));
                l->setText(path);
            }

        }

}

То по клику он сдвигается вниз, и уже на следующие клики не реагирует...почему?
да и еще не отображает путь(((
Записан
carrygun
Гость
« Ответ #3 : Январь 10, 2013, 13:43 »

Я возможно чегото не пойму, но может второй вариант исправить так:

Код
C++ (Qt)
if (*it) {
           m_item->setSelected(false);
           m_item=*it;
           m_item->setSelected(true);
           twg->setCurrentItem(m_item); // должно изменить текущий элемент на "последний сдвинутый"
           path = MainXMLFileInfo->absolutePath()+ "\\" + path;
           //web_window->load(QUrl::fromLocalFile(path));
           l->setText(path);
       }
 
Записан
Зайка_программист
Гость
« Ответ #4 : Январь 10, 2013, 14:06 »

Не реально спасибо)) Смеющийся Смеющийся Смеющийся Смеющийся Смеющийся Смеющийся

Зашагал)

А может  Вы еще подскажите как сделать так что бы он не сдвигался на один?
т.е. он при первом клике получает рута, а потом мои итемы...я вот все никак не пойму..как получить первый элемент...
Записан
carrygun
Гость
« Ответ #5 : Январь 10, 2013, 15:04 »

На вскидку в go() написать следующее:

Код
C++ (Qt)
...
m_item=twg->currentItem();
if(!m_item->parent())
   m_item = twg->itemBelow(m_item);
QString path =ItemToPath[m_item];
QTreeWidgetItemIterator it(m_item);
//it++; // это скорее всего не нужно будет
...
 

Остальные костыли с "пропуском" корневого элемента можно убрать.
P.S. код от балды, просто по справке, может чтото и не так нужно будет написать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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