crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как связать итемы на сцене с другими данными?
epishev
  опции профиля:
сообщение 19.4.2011, 9:36
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 23.3.2011
Пользователь №: 2533

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет.

Такой вопрос..

Как связать итемы на сцене с другими данными? Например со списком treeWidget.
При выборе строки с определенными данными, получаем нужный итем на сцене.

При добавлении итема (картинки) на сцену пишу.

Qstring buf=”1”; //имя
pPixmapItem->setData(1,buf);



потом при клике по итему из списка treeWidget...

bufListObject = scene.items();
for(int i=0;i<bufListObject.count();i++)
        if(bufListObject.at(i)->data(1)==item->text(0))
           bufListObject.at(i)->setVisible(false);


но ничего не происходит....

Может я не так понял как с data() и setData() работать?

Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 19.4.2011, 11:37
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


привет, будь более конкретен в своих вопросах, по приведенным кускам кода можно лишь догадываться, что за типы объектов в данных кусках кода присутствуют.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
epishev
  опции профиля:
сообщение 19.4.2011, 13:55
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 23.3.2011
Пользователь №: 2533

Спасибо сказали: 0 раз(а)




Репутация:   0  


сори, следующий раз буду более конкретен

QGraphicsPixmapItem* pPixmapItem = scene.addPixmap(bufPm);
pPixmapItem->setFlag(QGraphicsItem::ItemIsMovable);
pPixmapItem->setData(1,buf);


//выбираю из списка итем
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem* item, int column)
{

//................................
        bufListObject = scene.items();
        for(int i=0;i<bufListObject.count();i++)
            if(bufListObject.at(i)->data(1)==item->text(0))
                    bufListObject.at(i)->setAcceptedMouseButtons(Qt::LeftButton);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 19.4.2011, 14:21
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


if(bufListObject.at(i)->data(1)==item->text(0))

Выглядит немного странно, хотя должно производится автоматическое приведение QString к QVariant

но скорей всего у тебя при сравнении QVariant'ов происходит фейл, что за объект buf? char*?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
epishev
  опции профиля:
сообщение 19.4.2011, 15:26
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 23.3.2011
Пользователь №: 2533

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(wiz29 @ 19.4.2011, 15:21) *
что за объект buf? char*?


QString buf
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 19.4.2011, 15:40
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(epishev @ 19.4.2011, 16:26) *
Цитата(wiz29 @ 19.4.2011, 15:21) *
что за объект buf? char*?


QString buf

 if(bufListObject.at(i)->data(1)==item->text(0))

выполняется? если нет то, нужен дамп строк в консоль как QString (лучше выводить в дебаге строки в кавычках, чтоб увидеть все пробелы на конце)
qDebug()<<"\'"<<bufListObject.at(i)->data(1).toString()<<"\'";
qDebug()<<"\'"<<item->text(0)<<"\'";
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
epishev
  опции профиля:
сообщение 21.4.2011, 13:19
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 23.3.2011
Пользователь №: 2533

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(wiz29 @ 19.4.2011, 16:40) *
Цитата(epishev @ 19.4.2011, 16:26) *
Цитата(wiz29 @ 19.4.2011, 15:21) *
что за объект buf? char*?


QString buf

 if(bufListObject.at(i)->data(1)==item->text(0))

выполняется? если нет то, нужен дамп строк в консоль как QString (лучше выводить в дебаге строки в кавычках, чтоб увидеть все пробелы на конце)
qDebug()<<"\'"<<bufListObject.at(i)->data(1).toString()<<"\'";
qDebug()<<"\'"<<item->text(0)<<"\'";



спасибо! очень помогло в поиске причины
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.11.2019, 2:49