Как ограничить QRubberBand в QLabel?

Как указано выше, состояние a! = a не будет работать в g ++ и некоторых других компиляторах, но этот трюк должен. Это может быть не так эффективно, но это все равно:

bool IsNan(float a)
{
    char s[4];
    sprintf(s, "%.3f", a);
    if (s[0]=='n') return true;
    else return false;
}

В основном, в g ++ (я не уверен в других), printf выводит «nan» на% d или% .f форматы, если variable не является допустимым целым числом / float. Поэтому этот код проверяет, чтобы первый символ строки был «n» (как в «nan»)

0
задан Lemuel L 16 January 2019 в 14:49
поделиться

1 ответ

Я думаю, что это ожидаемое поведение. Если вы хотите ограничить размеры резиновой ленты, просто закрепите их в mouseMoveEvent переопределении ...

void frame_displayer::mouseMoveEvent(QMouseEvent *event)
{
    if(_rubberBand != nullptr)
    {
        if (this->underMouse())
        {
            if (_lastClickedBtn == Qt::LeftButton)
            {
                QPoint mouseCurrentPoint = event->pos();

                /*
                 * Clamp mouseCurrentPoint to the QRect of this widget.
                 */
                auto clamp_rect = rect();
                mouseCurrentPoint.rx() = std::min(clamp_rect.right(), std::max(clamp_rect.left(), mouseCurrentPoint.x()));
                mouseCurrentPoint.ry() = std::min(clamp_rect.bottom(), std::max(clamp_rect.top(), mouseCurrentPoint.y()));
                _rubberBand->setGeometry(QRect(_mouseOriginClickPoint, mouseCurrentPoint).normalized());
            }
        }
    }
}
0
ответ дан G.M. 16 January 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: