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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как корекктно работать с сигналом - itemActivated(QTreeWidgetItem*,int)???  (Прочитано 5705 раз)
Garik
Гость
« : Апрель 11, 2011, 15:26 »

Всем Привет!!!! Сижу вот разбираюсь с функцией TreeWidget, нужно сделать следущее: - создается например произвольное количество QTreeWidgetItem, далее нужно наступить мышкой или клавиатурой на какой либо елемент и при этом должен сработать сигнал itemActivated(QTreeWidgetItem*,int).
написал пробный код, сигнал срабатывает но при переходе в слот не передается номер елемента на которм было произведено действие!!! понимаю что задача тривиальна, но я новичек и нуждаюсь в помощи..
Выкладываю сразу код:
Код:
void ImageViewer::TreeWidget()
{

    dockWidget = new QDockWidget(tr("Tree"), this);
    dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    addDockWidget(Qt::LeftDockWidgetArea, dockWidget);


    QTreeWidget *treeWidget = new QTreeWidget(dockWidget);
    treeWidget->setColumnCount(2);
    QStringList headers;
    headers << ("Subject") << ("Default");
    treeWidget->setHeaderLabels(headers);

   QTreeWidgetItem *Main = new QTreeWidgetItem(treeWidget, QStringList("Main1"));
    for( int m = 0; m <10; m++)
    {
       QTreeWidgetItem *pChild = new QTreeWidgetItem( Main );
       QString sz00 = QObject::tr( "first defects: %1 ").arg( m);
       pChild->setText(0, sz00);
       POP.push_back(pChild);
   }


   QTreeWidgetItem *Main2 = new QTreeWidgetItem(treeWidget, QStringList("Main2"));
    for( int n = 0; n <10; n++)
    {
      QTreeWidgetItem *pChild1 = new QTreeWidgetItem( Main2 );
       QString sz00 = QObject::tr( "second defects: %1 ").arg( n );
       pChild1->setText(0, sz00);
       POP.push_back(pChild1);
   }

    qDebug() << "Iterating from top level";
    for (QTreeWidgetItemIterator it(treeWidget); *it; ++it )
    qDebug() << "Item text" << (*it)->text(0);

 dockWidget->setWidget(treeWidget);

connect(treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(setActivated(QTreeWidgetItem*, int)));
}


void ImageViewer::setActivated(QTreeWidgetItem *item, int column)
{

    qDebug() << "Work2";
      qDebug() << "Number:" << column;
}

постоянно передается "0"Непонимающий?

Заранее Спасибо!!!
Записан
mutineer
Гость
« Ответ #1 : Апрель 11, 2011, 15:29 »

Там передается не номер строки (элемента), а номер столбца, на котором кликнули. Видимо столбец у тебя один, поэтому 0 всегда и передается. Внимательнее с документацией же, ну...
Записан
Garik
Гость
« Ответ #2 : Апрель 11, 2011, 15:45 »

Там передается не номер строки (элемента), а номер столбца, на котором кликнули. Видимо столбец у тебя один, поэтому 0 всегда и передается. Внимательнее с документацией же, ну...

сорри понял!!!! А как сделать  что-бы передовался именно номер елемента на котором произвилось действме,,,, у меня именно в этом загвостка??? 
Записан
mutineer
Гость
« Ответ #3 : Апрель 11, 2011, 15:49 »

Тебе нужен именно номер? QTreeWidgetItem* - это указатель на кликнутый элемент, в нем все данные этого элемента есть. Но если нужен именно номер, то думаю можно получить через
Код:
item->parent->indexOfChild(item)
Хотя это как-то костыльно
Записан
Garik
Гость
« Ответ #4 : Апрель 11, 2011, 16:04 »

Именно номер!!! что-бы его в дальнейшем присвоить обычно переменной типа int i;!!!!!
Записан
mutineer
Гость
« Ответ #5 : Апрель 11, 2011, 16:05 »

Попробуй тот кусок, что я написал. Вроде должен возвращать номер
Записан
Garik
Гость
« Ответ #6 : Апрель 11, 2011, 16:18 »

Благодарю!!!! получилось. Я тут еще попробовал другим методом через итератор(из примеров выпыл): вроде тоже показывает номер, но вот как присвоить простой переменно еще не понял.

Код:
void ImageViewer::setActivated(QTreeWidgetItem *item, int column)
{
int i;


i=item->parent()->indexOfChild(item);

      for (QTreeWidgetItemIterator it(item, QTreeWidgetItemIterator::Selected); *it; ++it )  //обход выделенных item
      qDebug() << "Select Item " << (*it)->text(0);


qDebug() << "Number:" << i;

}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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