1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456

Нарисовать, двигать, сохранить линию Qt 4.8.4

27.10.2017, 11:33. Показов 6824. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можете сделать простой пример до максимально пункта какого не жалко?

1)создать массив ImageArray 300 на 300 который будет RGB изображением.
2)записать в ImageArray попиксельно через цикл For горизонтальную линию цветом(135,154,160) длинной 10 пикселей.
3)создать слайдер1,слайдер2 задают координаты ячейки в ImageArray с которой начинаем рисовать линию.
4)File save/File open/File Save As... сохраняют \ открывают значения слайдеров.
Открыли файл и рисует линию в загруженных координатах.
Когда выбираем File save/File open/File Save As видны эскизы\привью мелкой картинкой где в изображении в каждом файле красная линия 100 на 100 пикселей. Слайдеры и обновлять растеризацию ImageArray нужно не чаще 60 раз в сек по таймеру.
Или слайдер задает FPS. Будут тяжелые расчеты.
После моего усложнения будет мелкая прога рисовать абстракции от 10 параметров типа таких:
Название: ScreenShot00705.jpg
Просмотров: 204

Размер: 18.3 Кб
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2017, 11:33
Ответы с готовыми решениями:

pictureBox1_MouseMove как двигать линию по координатам курсора
делаю програмку в которой человек по данным графика выбирает себе значения переменных, хочу попробовать для удобства пользователя сделать...

Как нарисовать фигуру и двигать ее мышью?
Как нарисовать геометрическую фигуру (треугольник, квадрат, многоугольник) в окне? И как сделать так чтобы они двигались мышью?

Нарисовать параболу и двигать ее с помощью стрелок
Пожалуйста напишите программу которая рисует параболу,чтобы её можно было двигать с помощью стрелок

47
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
28.10.2017, 22:12  [ТС]
Студворк — интернет-сервис помощи студентам
0_0
Я думал нажатие на кнопку clicked() генерирует сигнал.
Где то созданный уже паблик слот у Label (по идее он уже там есть раз он в справке открытые слоты) принимает сигнал и производит действие. Странно…

Добавил 1 слайдер, изменил слот на render.
Подправите?
Вложения
Тип файла: 7z rastr1.7z (50.7 Кб, 1 просмотров)
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
28.10.2017, 23:52  [ТС]
Двигает отрезок двумя слайдерами.
Вложения
Тип файла: 7z rastr2.7z (325.9 Кб, 4 просмотров)
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
29.10.2017, 01:35  [ТС]
Добавлю слайдер “пустые вычисления” который будет увеличивать количество итераций For чтобы FPS сильно падал.

Задача:
Динамически изменять частоту обновления растра или слайдеров (FPS) в зависимости от сложности вычислений (времени расчета и вывода растра).

Показывать в верхнем правом углу 2 параметра:
FPS:
VozmoznUsloznRascet:

Грубо алгоритм:
VozmoznUsloznRascet //во сколько раз можно увеличить время расчета
FPS // частота обновления растра и данных со слайдеров.
TimeForRender //время расчета от "данные пришли" до "растр отображен"


VozmoznUsloznRascet=(1/60)/TimeForRender

Алгоритм:
Уникальные данные пришли.
Запуск таймера0.
Заблокировать движение слайдера мышкой(или весь GUI).
Делаем расчеты, показываем растр.
Записать в сек. время работы в TimeForRender
Найти VozmoznUsloznRascet=(1/60)/TimeForRender

Если
TimeForRender<1/60
то
FPS=60
ждать в таймер0 значения 1/60 сек обновить растр и обнулить таймер0
иначе
FPS=1/TimeForRender
ждать в таймер0 значения 1/FPS обновить растр и обнулить таймер
Slip., alexu_007,
Какие то команды подскажете? Как заблокировать слайдер? Может нужен другой подход? Может похожий алгоритм уже есть в Qt и это велик?
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,348
29.10.2017, 22:21
Никак не возьму в толк, зачем тебе слайдеры???

Если я правильно понял, тебе нужен мультик, красивая картинка размером 300х300. Её будет делать спец. функция - то есть заполнять массив, и этот массив нужно перерисовывать на экране. Ну так сделай для начала, что-бы горизонтальная черта по растру бегала. Сама, без слайдеров. Заодно и быстродействие оценишь, нужны тормоза в виде таймера или нет.

...

Заблокировать движение слайдера мышкой(или весь GUI).
Зачем тут нужен слайдер, и зачем его блокировать?

Делаем расчеты, показываем растр.
Какие расчёты, если данные уже пришли?

Записать в сек. время работы в TimeForRender
Найти VozmoznUsloznRascet=(1/60)/TimeForRender
Для чего эти танцы с бубном? Что-бы на быстрых и медленных компьютерах крутилось одинаково? Это сложно. Нужно получить скорость процессора и скорость вывода графики, и от этого плясать. Забей, это задача не для новичка. Сделай проще, чтобы слайдером можно было скорость менять - как раз и слайдер пригодится.

алгоритм1:
получать данные, сразу их на экран, и так далее в цикле.

если слишком быстро, алгоритм2:
запускаем таймер
по прерыванию таймера получаем данные, выводим на экран, ждём следующего прерывания таймера.
слайдером меняем частоту срабатывания таймера

p.s. меня 2 дня не будет
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
30.10.2017, 00:53  [ТС]
Цитата Сообщение от alexu_007 Посмотреть сообщение
Никак не возьму в толк, зачем тебе слайдеры???
Будет мелкая прога расчет абстракций в реальном времени пока ведем слайдеры. С таким FPS как успеет. Делал прогу на С++ glut было 5 слайдеров, сделал свое уравнение для экспериментов и слайдеров стало 30… и будет больше.

Если будет нормальная производительность рендера и получиться сделать
Цитата Сообщение от Excalibur921 Посмотреть сообщение
4)File save/File open/File Save As... сохраняют \ открывают значения слайдеров.
то займусь экспериментами с фракталами то слайдеров будет порядка 300 штук чисто для экспериментов.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
После моего усложнения будет мелкая прога рисовать абстракции от 10 параметров типа таких:
Цитата Сообщение от alexu_007 Посмотреть сообщение
и зачем его блокировать?
Чтобы растр не обновлялся до окончания всех расчетов, это занимает CPU ненужными расчетами.
Цитата Сообщение от alexu_007 Посмотреть сообщение
Какие расчёты, если данные уже пришли?
Вместо одного For там будет несколько циклов, в одном будет порядка 100 000 итераций.
Цитата Сообщение от alexu_007 Посмотреть сообщение
Что-бы на быстрых и медленных компьютерах крутилось одинаково? Это сложно.
Разве? Один таймер и все.

Алгоритм:
Уникальные данные пришли.
Запуск таймер0.
остановить курсор мышки или
остановить слайдер0 а текущем положении // не знаю что выбрать правильно

Делаем расчеты, заполняем буфер изображения. // может правильней не setPixel а
//заполнить массив как в обычном С++ ?

Если расчеты завершены то TimeForRender=значение таймер0
VozmoznUsloznRascet=(1/60)/TimeForRender

Если
TimeForRender<1/60
то
TimeOfFrame=1/60
FPS=60
иначе
TimeOfFrame=TimeForRender
FPS=1/TimeForRender

если таймер0==TimeOfFrame то обновить растр
стоп таймер0
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,348
30.10.2017, 06:41
Ну так в чём проблема? Что-бы "заблокировать" слайдер для пользователя, его свойство Enabled нужно переставить в false. Разблокировать соответственно в true.

Для записи/чтения файла вставь кнопки со слотами, как это сделать ты теперь умеешь - смотри ХеллоВорд.

Рисовать на экране ты умеешь - растр нарисовал, чёрточку нарисовал и даже двигаться заставил.

И всё, что ещё нужно то? Пиши свою гениальную прогу. И будет она тебе рисовать волшебные картинки.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
30.10.2017, 20:28  [ТС]
Это вам так кажется что все просто.
Как я и думал…на частоту опроса слайдеров в Qt забили или я чего то не понял?
Если время расчета For постоянно(как сейчас в примере кода ниже) то и FPS должны быть постоянные и ниже FPS монитора.
Замеряю количество вызовов рисования от слайдера. FPS гуляет...при FPS монитора 60. Отсюда и лаги в GUI.
Название: ScreenShot00773.jpg
Просмотров: 60

Размер: 12.1 Кб
Как задавать частоту отправки SIGNAL для всех слайдеров параметром?
Может это?
void QAbstractSlider::setRepeatAction ( SliderAction action, int thresholdTime = 500, int repeatTime = 50 ) [protected]
Устанавливает действие действия, которое должно запускаться повторно с интервалами repeatTime, после начальной задержки порогового времени.

Т.е. двигаем слайдер и он 500 мс ничего не делает а потом выдает сигналы каждые 50 мс?
Где настройка частоты опроса…


Или просто нельзя подсоединять сигнал слайдера valueChanged (int) к слоту класса. Нужен фильтр который будет записывать int в переменную и читать ее если расчет готов то 60 раз в сек или по требованию? Тогда зачем во всех книгах так пишут и в Assistant?

Может можно читать слайдер без сигнал\слот?
Иначе с этими сигналами и слотами какая то каша с не стабильными лагами...

Вообще странная логика создателей Qt.
Закомментируйте 32 строку:

Потаскайте слайдер…
Если слайдер двигают на малое расстояние то и частота отправки SIGNAL valueChanged (int) малая малый FPS. Если двигают на большое то частота может быть до 80…это какой то индусский код. Разве во всем мире не опрашивают слайдер с частотой работы монитора + уменьшают частоту если расчет не завершен? Грубейшая алгоритмическая ошибка Qt…
Может я что то неправильно делаю?
Можете подсказать синтаксис как вызывать некоторые команды?
Хотелось бы сделать такой Алгоритм:

//----------
Нажали слайдер //sliderPressed()
Прочитали его значение // int value () const
Деактивировать слайдер //? так и не понял какая команда?...
Запуск таймер0 макс время счета 1 сек, // timer.elapsed()
Запуск таймер1 вызов “обновить кадр” через 1/60 сек // QTimer::singleShot(16, this, SLOT(updateCaption()));
пустой расчет For

Если
значение таймер0 <1/60
то
стоп таймер0
Timer1Flag=1
иначе
стоп таймер0
стоп таймер1
обновить растр

Если таймер1 разрешен то обновить растр по его событию.
//----------

Почему это так сложно…почему нет готового. Это ведь очевидное требование стабильный FPS.
В итоге:
Время заполнения массива может сильно меняться в процессе работы проги.
Нужно чтобы слайдеры читались только если расчет завершен и выдавали максимум FPS но меньше 60. Большое время расчета? Тогда FPS низкие но постоянны.
А не как сейчас.. то 5 то 90 и лаги лаги… =).
Как вызывать и блокировать вывод растра массива? Он должен считаться в буфер а потом по 1 команде показывать.
Вложения
Тип файла: 7z rastr4.7z (300.1 Кб, 6 просмотров)
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
31.10.2017, 10:42  [ТС]
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(render()));
 
/*
QObject::connect(const QObject*     sender,
                 const char*        signal,
                 const QObject*     receiver,
                 const char*        slot,
                 Qt::ConnectionType type = Qt::AutoConnection
                );
*/
    QObject::connect(ui->horizontalSlider,
                     SIGNAL(valueChanged(int)),
                     this,
                     SLOT(render()),
                     Qt::ConnectionType type = Qt::AutoConnection             //<--------Eror
                    );
Как правильно? Хоть бы 1 пример кода был…

Добавлено через 1 минуту
Заменить на
C++ (Qt)
1
Qt::DirectConnection.
Добавлено через 12 минут
Из 3 книг единственный полезный пример кода…рукожопые авторы http://blog.harrix.org/article/4826
Пашет так:
C++ (Qt)
1
2
3
4
5
6
    QObject::connect(ui->horizontalSlider,
                     SIGNAL(valueChanged(int)),
                     this,
                     SLOT(render()),
                     Qt::DirectConnection
                    );
Всеравно FPS гуляет...походу и рисование окна через одно место сделана в Qt…
Как сделать правильно?
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
31.10.2017, 12:13
Вы, судя по всему, выбрали не тот инструмент для решения своей задачи. Если нужно нарисовать кастомное окно в формочке, проще рисовать GLUTом или другим OpenGL решением. Виджеты Qt - очень неудачное решение для рисования картинок в реальном времени.

Частота опроса гуляет. Она и будет гулять. В Qt4 сигналы-слоты сделаны через строки, пересылаются через очередь сообщений (даже Direct, влияет он только на приоритет) и рисуются через WinGDI+. Откуда в этой связке скорость? Это в Qt5 можно попытаться повыпендриваться через прямой вызов метода, но вам же религия не позволит. Все таймеры ГУИ неточные, могут гулять на десятки и сотни миллисекунд. Точные таймеры грузят камень очень лихо.

Точность работы слайдера в 60\75\120 FPS - вообще не тривиальное требование. Лично у меня, и, держу пари, не только у меня, Qt нужен для быстрого накидывания формочек для тупых манагеров и очень хорошей защиты тела приложения от взлома. Конкурентов по этим двум требованиям нет. Со скоростью и умом манагеров даже 1 FPS - достаточное быстродействие. Попробуйте пихать виджеты не в QWidget, а в QGraphicView, он, вроде как, за всё хорошее против всего плохого и живёт по заветам OpenGL, но это не точно. Как? Понятия не имею. Не пользовал.

Полный перевод оффдоков есть на crossplatform.ru. Примеры идут в комплекте. Плюс, все примеры есть в комплекте поставки Qt, достаточно открыть справку в креаторе.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
31.10.2017, 13:28  [ТС]
Думал может модератор раздела покажет как можно ускорить… Упростил пример до нельзя, 1 слайдер и пустой For.
Хотел cделать проге сложный GUI с визуальной настройкой всего + скорость работы не на последнем месте…а выходит баян?
Цитата Сообщение от icpu Посмотреть сообщение
проще рисовать GLUTом или другим OpenGL решением.
Уже делал… небыло подписей слайдеров, File-Save и т.д…
Мой GUI это был hello world велик отрезки и точки которые рисовала видеокарта С++ Glut было 60 FPS...думал еще там добавить мелкие тяжелые куски расчетов на Ассемблер.
У меня WinXP 1 ядро. Может тогда WinForms намного шустрей будет? Кроссплатформ ненужен, делаю для себя мелкую прогу.
Цитата Сообщение от icpu Посмотреть сообщение
QGraphicView
Попробую шаманить с ним. Но надежды мало…
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.10.2017, 14:38
Excalibur921, рисование можно вынести в отдельный поток, чтобы перерисовка осуществлялась не для каждого положения слайдера во время перетаскивания, а например для каждого n-ого, когда предыдущая перерисовка завершилась. + отдельная перерисовка для события, когда пользователь отпускает левую клавишу мыши.

Естественно нужно будет потом пересылать картинку результата перерисовки через очередь событий в поток ГУИ через очередь событий (по виджету-слоту), либо пересылать только сообщение о обновлении картинки, а использовать общий объект картинки в памяти (и работать с ним из этих двух потоков - свой рисует, ГУИшный пересылает в видеокарту готовое изображение).

Добавлено через 2 минуты
Да, из своего потока обращаться к объектам ГУИ нельзя. Взаимодействие только через очереди событий (по сигналам-слотам или напрямую через эвенты)
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
31.10.2017, 14:43
https://habrahabr.ru/post/338106/
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.10.2017, 14:57
Именно для "отрисовки линий и всё" лучше юзать непосредственно OpenGL - http://doc.qt.io/qt-5/QGLWidget.html#details , https://habrahabr.ru/post/206156/ , https://folkprog.net/podklyuchenie-opengl-v-qt/ ... Предварительно преобразовав массив линий в удобоваримый для неё вид.

Тогда никаких ассемблерных вставок - всё перекладывается на видеокарту и она уже будет считать всё. Тем более что расчёта координат и рендеринга она в первую очередь и предназначена.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
31.10.2017, 17:26  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
когда предыдущая перерисовка завершилась. + отдельная перерисовка для события, когда пользователь отпускает левую клавишу мыши.
Можете показать код перерисовка слайдера по таймеру интервал 0.5 сек самого слайдера?

Может слайдер по дефалту перерисовывает 1000 раз в сек? Как отключать виджету или всем Antialiasing, TextAntialiasing и все что дает лаги. В assistant написно что GUI это pure cpu render. Может по дефалту перерисовка слайдеров идет по событию valuechanged(int)? Т.е. если слайдер имеет 200 делений…т.е. перерисовка может быть 200 раз + CPU Antialiasing…что и дает лаги.


Очень сомневаюсь что создатели Qt сделали примерно так:
1)Рисуем тело слайдера линию и черточки.
2)Делаем суперсемплинг.
3)Сохраняем текстуру в буфер.
4)Ручка слайдера все тоже…остается двигать текстуру “ручка слайдера” через видеокарту
по событию перерисовки.
В итоге от параметра двигаем мелкую текстуру видеокартой.

Скорей всего там так:
1)Нарисовать весь слайдер c ручкой.
2)Суперсемплинг
Повтор пунктов 1 и 2 по сигналу ValueChanged(int)

Выглядят слайдеры одинаково а скорость работы
первый метод реального времени почти 0% CPU
второй будет лютые лаги 100% CPU.

Цитата Сообщение от TRam_ Посмотреть сообщение
использовать общий объект картинки в памяти
Как рисовать в буфер изображения а затем показать по 1 команде?
Подсказали так Нарисовать, двигать, сохранить линию Qt 4.8.4
Там столько этих методов рисования…черт ногу сломит.
Изначально хотелось бы попробовать получить серый растр из первого расчет на pure cpu. И глянуть на скорость.
Цитата Сообщение от TRam_ Посмотреть сообщение
ГУИшный пересылает в видеокарту готовое изображение
Все расчеты pure cpu. Шейдеров у меня нет аппаратно.

Цитата Сообщение от TRam_ Посмотреть сообщение
или напрямую через эвенты
И как это сделать? Можете набросать пример?

Весь расчет считает попиксельно. Тут нет примитивов( пастеризаций кругов радиусом N пикселей, или отрезков и т.д) .
Я думаю тут нет смысла брать видеокарту.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.10.2017, 17:45
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Тут нет примитивов( пастеризаций кругов радиусом N пикселей, или отрезков и т.д)
видеокарта не умеет рисовать примитивы. Она умеет рисовать только линии и треугольники. Остальное получается из их комбинаций и потоковой обработки пикселей на них (или пикселей экрана, если рендеринг по-пиксельный).
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.10.2017, 18:55
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Потаскайте слайдер…
Если слайдер двигают на малое расстояние то и частота отправки SIGNAL valueChanged (int) малая малый FPS. Если двигают на большое то частота может быть до 80…это какой то индусский код.
в общем разобрался, что вы добиваетесь. В данном случае речь не о переотрисовке виджета, а о обработке виндой движения мыши. А это вещи разные. А для тестирования вами именно перерисовки виджета прикладываю код. И что перерисовки при движении виджета происходят не чаще 7 мс, но обычно гораздо реже (и тут дело не в Qt а в обработке мыши виндой), а собственно перерисовка занимает 0.3 мс (т.е. теоретически может обеспечить fps 3000).

P.S. делал под Qt5.3, так что Для Qt4.8 нужно будет убрать "widgets" из rastr.pro и подшаманить инклуды.
Вложения
Тип файла: rar rastr.rar (2.6 Кб, 4 просмотров)
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
31.10.2017, 19:37  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
нужно будет убрать "widgets" из rastr.pro и подшаманить инклуды.
Настроился сам Qt 4.8.4.

Так вы отключили всю нагрузку…
widget.cpp
C++ (Qt)
1
//  for (int i = 1; i < 10000000; ++i){}
Включаем получаем:

Как сделать чтобы FPS был максимально высокие и ниже 60 и если меняется время расчета в For?
Я считал количество входов в слот render(); переменная “a”...ваш метод я не знаю.


Пример:
Я рисую окружность из i < 10 000 точек. Время работы For 0.01 сек
Поменяю параметр и будет рисовать из i < 1 000 000 точек, тогда Время работы For 0.95 сек.
Как сделать чтобы FPS уменьшились в зависимости сложности вычислений т.е. от времени работы цикла For и были хоть примерно постоянны?
Сейчас FPS сильно меняются и не стабильны. Можно назвать алгоритм адаптивный FPS.

Мне нужны примерно постоянные FPS. Т.к. если нет то растр который я рисую будет меняться рывками и нелинейно. Пусть даже падает до 5 FPS лишь бы постоянные а не прыгали. Как отключить анизотропную фильтрацию всему GUI? Как еще можно ускорить?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.10.2017, 20:17
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Как сделать чтобы FPS уменьшились в зависимости сложности вычислений т.е. от времени работы цикла For и были хоть примерно постоянны?
я ж уже говорил - вынести отрисовку (или в данном упрощённом случае цикл) в другой поток. Тогда fps у ГУИ вообще никак не будет зависеть от сложности ваших расчётов, но, естественно, быстрее, чем происходят расчёты, обновление картинки происходить не будет (если конечно не будете возиться с прерыванием расчёта). Если нужен "как бы стабильный fps" между запусками расчётов, используйте этот самый QTimer в упомянутом потоке.

Добавлено через 5 минут
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Включаем получаем:
получаем что перемещения мыши ваша windows XP обрабатывает иногда реже, чем 0.97 секунды. О каком fps может идти речь, если на вашем одноядернике расчёты просаживают всю работу операционной системы?

Добавлено через 14 минут
Хотя можно и вот так (это в общем совпадает с вашим подходом):

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "widget.h"
#include "ui_widget.h"
#include "defs.h"
 
 
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
//QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(render()));
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
 
 
QTimer *timer2 = new QTimer(this);
connect(timer2, SIGNAL(timeout()), this, SLOT(render()));
timer2->start(10);
 
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::update()
{
    qDebug() << "FPS:"<< a;
    a=0;
}
 
void Widget::render()
{
    int slider_pos = ui->horizontalSlider->value();     // отсюда берём текущее положение слайдера вне зависимости как его двигают
    a++;
   for (int i = 1; i < 10000000; ++i){}
}
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
31.10.2017, 21:35  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
Хотя можно и вот так
Так делал.

Предлагали также сложней:
Цитата Сообщение от alexu_007 Посмотреть сообщение
по прерыванию таймера получаем данные, выводим на экран, ждём следующего прерывания таймера.
слайдером меняем частоту срабатывания таймера
Хочу адаптивный FPS. Но не понимаю синтаксиса из справки…Чтобы сам задавал когда таймеру вывести кадр.
Вот тут алгоритм
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Нажали слайдер //sliderPressed()
Может отключение слайдера убавит лаги? Или дисконнект слот? Или изменять частоту опроса мышки? (такое доступно?).
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.10.2017, 22:22
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Или изменять частоту опроса мышки?
найди комп с двухядерным процессором, тогда твой зависший на расчётах поток не будет тормозить систему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2017, 22:22

Прямоугольники: нарисовать, двигать, управлять, удалять
На си шарпе нужно сделать так, чтобы из одного класса я мог создать два прямоугольника, в которых будет отличаться текст. В одном...

Нарисовать заданные фигуры и сделать, чтобы их можно было двигать
нужно написать программу на делфи: с помощью DXDraw Нужно нарисовать такие штучки (только ровные=) ) и чтобы их можно было двигать.

Нарисовать линию
Нарисовать горизонтальную &quot;линию&quot;, состоящую из 15 разноцветных пересекающихся окружностей.

Нарисовать линию
Возникла проблема: ничего не хочет рисоваться на панели. Давно не пользовался свингом, поэтому немного туплю) public class GamePanel...

Нарисовать линию
Привет всем. Почему данный код не рисует линиЮ? package com.exampl1e.tt; import android.content.Context; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru