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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / 2D и 3D графика / Re: Нечеткие границы при прорисовке на графической сцене. : Сентябрь 20, 2021, 09:59
Спасибо большое за советы
2  Qt / 2D и 3D графика / Re: Нечеткие границы при прорисовке на графической сцене. : Сентябрь 17, 2021, 17:59
Спасибо.
Попробовал справа без градиента, стало хуже.
А на маркере этих эффектов не видно, он не прямой и движется быстро.
3  Qt / 2D и 3D графика / Re: Нечеткие границы при прорисовке на графической сцене. : Сентябрь 17, 2021, 16:23
Спасибо.
Вот. https://disk.yandex.ru/i/DSCB3oxDBaCOhA
Красный маркер перемещается, управляемый внешним прибором, передающим данные с частотой 50 Гц. Присутствуют небольшие "рывки", а хочется, чтобы плавно двигалось
4  Qt / 2D и 3D графика / Re: Нечеткие границы при прорисовке на графической сцене. : Сентябрь 17, 2021, 14:53
Спасибо большое!
Попробовал с градиентом. Получилось лучше, но все равно остались дерганья. Скорее всего, это из за нестабильного фреймрейта. Думаю, стоит поковырять в этом направлении
5  Qt / 2D и 3D графика / Нечеткие границы при прорисовке на графической сцене. : Сентябрь 17, 2021, 11:21
Здравствуйте!
Столкнулся с такой проблемой.
Есть графическая сцена QGraphicsScene и на ней множество итемов QGraphicsItem, один из которых представляет собой движущиеся по экрану полупрозрачные полосы. Это необходимо для визуальных помех в игре. В итемах перекрыты методы boundingRect() и paint().
метод paint() полос выглядит так:

Код:
void LinesIrriant::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->setPen(QPen(m_color, 1, Qt::SolidLine, Qt::FlatCap));
    painter->setBrush(QBrush(m_color, Qt::SolidPattern));

        auto x = boundingRect().x() - m_width * (m_dutyCycle + 1) + m_position % (m_width * (m_dutyCycle + 1));
        while (x < boundingRect().x() + boundingRect().width())
        {
            painter->drawRect(static_cast<int>(x), static_cast<int>(boundingRect().y()),
                              m_width, static_cast<int>(boundingRect().height()));

            x += m_width * (m_dutyCycle + 1);
        }

    m_position += m_speed;
}

При прорисовке границы полос получаются не ровные, а рваные, как бы дрожащие, особенно на больших скоростях.
Посмотреть можно сдесь: https://disk.yandex.ru/i/W2HS6uTm_Z0lWQ
Как этого можно избежать?
Заранее огромное спасибо за советы.
6  Qt / Вопросы новичков / Re: QTimer::singleShot и удаление объекта : Июль 12, 2021, 11:32
спасибо
7  Qt / Вопросы новичков / Re: QTimer::singleShot и удаление объекта : Июль 12, 2021, 10:20
Спасибо всем ответившим. Надеюсь, что понял.

Код:
QTimer *m_timer;
...
m_timer = new QTimer();

...

m_timer.singleShot(100, [=]
    {
            ui->Indicator->setValue(0);
    });

...

delete m_timer;

После
Код:
delete m_timer;
singleShot сработает?
8  Qt / Вопросы новичков / Re: QTimer::singleShot и удаление объекта : Июль 09, 2021, 17:36
Просто добавьте объект QTimer в класс и при разрушении виджета разрушайте и таймер.
Спасибо, попробую!


Цитата: cpp
QTimer::singleShot(100, this, [this]
    {
            qDebug() << "singleshot";
            ui->Indicator->setValue(0);
    });

?

Не понял, что не так
А такого у меня нет: 100, this, [this]
9  Qt / Вопросы новичков / QTimer::singleShot и удаление объекта : Июль 09, 2021, 16:46
Здравствуйте!
Есть некий виджет, который асинхронно, с определенной периодичностью получает данные и отображает их на себе и зажигает индикатор их приема. После получения данных, через, скажем 100 мсек, этот индикатор должен быть погашен. Я это сделал так:

Код:
void MyWidget::getData(DataType *data)
{
    ....

     //! Зажжем индикатор
     ui->Indicator->setValue(1);

    //! Погасим индикатор через 100 мс
    QTimer::singleShot(100, [=]
    {
            ui->Indicator->setValue(0);
    });
    ....


Все прекрасно работает до удаления виджета. Возникает нерегулярный сбой.
Поставил ловушки:

Код:

MyWidget::~MyWidget()
{
    qDebug() << "destroy";
    delete ui;
}

void MyWidget::getData(DataType *data)
{
    ....

     //! Зажжем индикатор
     ui->Indicator->setValue(1);

    //! Погасим индикатор через 100 мс
    QTimer::singleShot(100, [=]
    {
            qDebug() << "singleshot";
            ui->Indicator->setValue(0);
    });
    ....

 Выводит в консоль:
singleshot
singleshot
singleshot
destroy
singleshot

и сбой.
Как правильно обойти эту проблему?
Придумал вариант поставить семафор:

Код:

class MyWidget ...
{

    bool m_isFinish {false};
}


MyWidget::~MyWidget()
{
    qDebug() << "destroy";
    m_isFinish = true;
    delete ui;
}

void MyWidget::getData(DataType *data)
{
    ....

     //! Зажжем индикатор
     ui->Indicator->setValue(1);

    //! Погасим индикатор через 100 мс
    QTimer::singleShot(100, [=]
    {
            if (!m_isFinish)
            {
                qDebug() << "singleshot";
                ui->pbPulse->setValue(0);
            }
    });
    ....

только правильно ли это?
10  Qt / Вопросы новичков / Re: Наследование ui : Май 26, 2021, 13:32
Спасибо большое. Я так примерно и представлял, но думал, что есть какое-то специфичное решение, о котором я не знал.
11  Qt / Вопросы новичков / Наследование ui : Май 17, 2021, 09:57
Здравствуйте, уважаемые коллеги!
Недавно начал использовать Qt, до этого довольно долго работал на Delphi и Object Pascal.
Появился такой вопрос.
Есть подкласс от QWidget, который содержит заголовок .h, код .cpp и форму .ui:
Код:
class MySuperClass : public QWidget
{
...
}
На форме имеются некоторые виджеты, относящиеся к MySuperClass.
Есть также подкласс, который также содержит заголовок .h, код .cpp и форму .ui:
Код:
class MySubClass : public MySuperClass
{
...
}
На форме также имеются некоторые виджеты, относящиеся к MySubClass.

Как правильно это реализовать с помощью Qt?
В Delphi на форме наследнике имеются те же элементы, что и на форме - предке, которые можно изменять, вставлять что-то новое и т.д.
В Qt. форма подкласса пустая. Я могу расположить на ней виджеты, но они появляются в непонятных местах.
Как их добавить так, чтобы они появлялись в нужных местах формы суперкласса?
Страниц: [1]

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