Russian Qt Forum
Ноябрь 25, 2024, 19:36
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
изменение содержания QgraphicsSimpletextItem и системный paint ()
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: изменение содержания QgraphicsSimpletextItem и системный paint () (Прочитано 6348 раз)
iceBear
Гость
изменение содержания QgraphicsSimpletextItem и системный paint ()
«
:
Июль 19, 2012, 15:59 »
Здравствуйте,
на главном виджете (ImageViewer) присутствуют еще 10 экземпляров QGraphicsSimpleTextItem, содержимое экземпляров текста периодически обновляется (по событию от таймера, например). При этом операции изменения размеров главного окна, его перетаскивания по экрану приводят ошибке. Чем таймаут таймера, который обновляет текст больше, тем меньше вероятность возникновения ошибки.
Проблема в том, что в любом случае вероятность сохраняется. Такое чувство, что экземпляры текста постоянно вызывают paint (), и при управлении окном тоже вызывается paint () когда они вызываются одновременно возникает ошибка.
Можно ли как - нибудь в QT управлять вызовом системной paint (), которая проходит из недр библиотеки?
спасибо
Записан
iceBear
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #1 :
Июль 19, 2012, 16:01 »
... хоть в каком направлении рыть, чтобы избежать таких коллизий?
спасибо
Записан
mutineer
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #2 :
Июль 19, 2012, 16:05 »
все эти действия происходят в одном потоке?
Тото я думаю тема знакомая - а это просто дубль, оказывается...
Обновляй текст в главном потоке
«
Последнее редактирование: Июль 19, 2012, 16:12 от mutineer
»
Записан
iceBear
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #3 :
Июль 20, 2012, 07:22 »
Да, тема та же, но теперь текст обновляется в главном потоке, поэтому вопрос был переформулирован в другом разделе
Записан
Bepec
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #4 :
Июль 20, 2012, 07:32 »
Насколько я помню, paint вызывается именно QGraphicsView. Если же вы вызываете его сами - в вашем же коде и проблема.
Записан
iceBear
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #5 :
Июль 20, 2012, 08:48 »
paint () я пока еще сам не вызывал - только думал об этом, теперь наверное и не буду
Записан
mutineer
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #6 :
Июль 20, 2012, 11:26 »
Цитата: iceBear от Июль 20, 2012, 07:22
Да, тема та же, но теперь текст обновляется в главном потоке, поэтому вопрос был переформулирован в другом разделе
Если все перерисовки вызываются из главного потока, то
одновременно
они вызываться не могут
Записан
iceBear
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #7 :
Июль 23, 2012, 11:19 »
Здравствуйте,
долго испытывал разные варианты ( не будем их тут перечислять) - решения не придумал и ошибку не нашел - экстракт проблемы такой :
Здравствуйте,
Я добавляю на на qgraphicsscene 10 экземпляров QGraphicsSimpleItemText
QGraphicsScene * scene = new QGraphicsScene;
for ( int i = 0; i < 10; i ++ )
scene -> addItem (new QGraphicsSimpleItemText ());
далее по сигналу таймера обновляю содержимое этих 10 экземпляров:
QTimer * timer = new QTimer ();
QObject :: connect (timer, SIGNAL (timeout ()),
& sensors,
SLOT (updateScene ())
);
void OwenSensor :: updateScene ()
{
char buf [32];
sprintf (buf, "%5.2f", _data);
_text -> setText (buf);
}
через некоторое время программа сваливается в ошибку. Эту ситуацию может ускорить и гарантирует параллельное изменение размеров главного окна. Также появление ошибки ускоряет уменьшение значения таймаута таймера
Такое ощущение, что вызов setText провоцирует вызов метода paint () , а при изменении размеров или положения окна он вызывается автоматически, таким образом два paint () между собой не могут подружиться.
Скажите пожалуйста, что я делаю не так?
може пример какой-нибудь существует, стандартные демы заботанил, ничего аналогичного кроме анимации не нашел, но она не подходит.
Записан
mutineer
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #8 :
Июль 23, 2012, 11:25 »
sensors живет в главном потоке?
Что такое _text?
Записан
iceBear
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #9 :
Июль 23, 2012, 11:51 »
_text экземпляр QGraphicsSimpleTextItem, sensors - вектор, где эти экземпляры храняться, он живет в том же потоке, что и граф. интерфейс,
_data - тип float, числа, которые должны отображаться на сцене
Записан
_OLEGator_
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #10 :
Июль 23, 2012, 14:56 »
Сделай минимальный проект с ошибкой, чтобы каждый смог собрать и посмотреть, а не снабжай нас огрызками кода.
Записан
iceBear
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #11 :
Июль 23, 2012, 15:11 »
тебе его куда выложить?
Записан
Bepec
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #12 :
Июль 23, 2012, 15:16 »
Сюда. Открой Дополнительные опции при создании сообщения и прикрепи архив.
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #13 :
Июль 23, 2012, 16:06 »
размер текстового буфера не маловат?
Записан
mutineer
Гость
Re: изменение содержания QgraphicsSimpletextItem и системный paint ()
«
Ответ #14 :
Июль 23, 2012, 16:10 »
Цитата: iceBear от Июль 23, 2012, 11:51
_text экземпляр QGraphicsSimpleTextItem, sensors - вектор, где эти экземпляры храняться, он живет в том же потоке, что и граф. интерфейс,
_data - тип float, числа, которые должны отображаться на сцене
Ну и откуда у вектора слот?
В общем да, код давай
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...