Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: AntonUfo от Февраль 14, 2011, 15:44



Название: Как установить флаг видимости для элемента сцены ?
Отправлено: AntonUfo от Февраль 14, 2011, 15:44
Всем привет ! Собственно subj ? Если устанавливать через item->setVisible(false); то элемент перестает ловить сигналы...
понял только что вроде как через флаги правильно делать но непонимаю как....



Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: GreatSnake от Февраль 14, 2011, 16:08
QGraphicsItem::setFlag( QGraphicsItem::ItemHasNoContents, !is_visibled );


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: AntonUfo от Февраль 14, 2011, 16:27
Пытаюсь сделать через такую конструкцию:


Код:
	QList<QGraphicsItem *> itemss = scene->items();
QMutableListIterator<QGraphicsItem *> j(itemss);
   while (j.hasNext()) {
  Link *link = dynamic_cast<Link *>(j.next());
    if (link && link->myNumberHolstLink == Holst){
j.setFlag(QGraphicsItem::ItemVisibleChange);
  }
}

не компилируется.....


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: GreatSnake от Февраль 14, 2011, 16:39
j.setFlag(QGraphicsItem::ItemVisibleChange); => link->setFlag(QGraphicsItem::ItemVisibleChange);

А что, свою писанину перед тем как на форум выкладывать внимательно посмотреть уже не судьба?


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: AntonUfo от Февраль 14, 2011, 16:46
j.setFlag(QGraphicsItem::ItemVisibleChange); => link->setFlag(QGraphicsItem::ItemVisibleChange);

А что, свою писанину перед тем как на форум выкладывать внимательно посмотреть уже не судьба?

пробовал и так и так.... если через link->setFlag вот что пишет компилятор:
"
QGraphicsItem::setFlag: невозможно преобразовать параметр 1 из 'QGraphicsItem::GraphicsItemChange' в 'QGraphicsItem::GraphicsItemFlag'
Для преобразования в перечисляемый тип требуется явное приведение (static_cast, приведение в стиле С или приведение в стиле функции)
"

а по поводу писанины, не хочешь не отвечай, я тебя не заставляю.....


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: GreatSnake от Февраль 14, 2011, 16:55
Хм, а зачем вообще нужен QGraphicsItem::ItemVisibleChange, который используется в QGraphicsItem::itemChange()?
Чем не подходит QGraphicsItem::setFlag( QGraphicsItem::ItemHasNoContents, !is_visibled )?


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: AntonUfo от Февраль 14, 2011, 17:19
Хм, а зачем вообще нужен QGraphicsItem::ItemVisibleChange, который используется в QGraphicsItem::itemChange()?
Чем не подходит QGraphicsItem::setFlag( QGraphicsItem::ItemHasNoContents, !is_visibled )?

ItemHasNoContents - элемент ничего не отрисовывает (т.е., вызов paint() на элементе не имеет эффекта). Вы должны установить этот флаг на элементах, которые не нужно отрисовывать, чтобы обеспечить избегания Графическим представлением ненужной подготовки к рисованию. Этот флаг был введён в Qt 4.6.

А мне нужно нарисованные элементы скрыть и нарисовать скрытые элементы.... мне ItemHasNoContents неподходит....



Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: GreatSnake от Февраль 14, 2011, 17:25
Цитировать
Если устанавливать через item->setVisible(false); то элемент перестает ловить сигналы...
Ты бы определился, что тебе нужно.


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: AntonUfo от Февраль 14, 2011, 17:37
Цитировать
Если устанавливать через item->setVisible(false); то элемент перестает ловить сигналы...
Ты бы определился, что тебе нужно.

у меня на сцене нарисовано 10 кружочков, мне нужно скрыть пять, а потом три опять вывести на экран..., если делать через
item->setVisible(false) то итемы которые скрыты перестают ловить сигналы........ и мне их снова на представление сцены не вывести.....


Название: Re: Как установить флаг видимости для элемента сцены ?
Отправлено: GreatSnake от Февраль 14, 2011, 17:41
Цитировать
у меня на сцене нарисовано 10 кружочков, мне нужно скрыть пять, а потом три опять вывести на экран..., если делать через
item->setVisible(false) то итемы которые скрыты перестают ловить сигналы........ и мне их снова на представление сцены не вывести.....
item->setVisible(true);