Реклама

Тег → c++

  • cordsac
  • Вопрос
  • 28 ноября 2017 г. 18:23

How can I resize QgraphicItem using mouse

qt, QGraphicItem, resize, Rectangle, c++

I asked question under this topic previously too,But this is slightly difference. I 'm following this tutorial these days,In that tutorial you drawn rectangle using mouse.So I tried to draw a rectangle when a button click.here is my sample code.


mainwindow.h

 private:
 QGraphicsRectItem *rect;

mainwindow.cpp

void MainWindow::on_btnCreate_clicked()
{
    //VERectangle *rectA = new VERectangle();
   // rect->setRect(20,20,100,100);*/
    rect = workplaceScene->addRect(20,20,100,100);
}

when I click the button, rectangle is generating properly,But it cannot resize. Sir,could you please explain me,how can I enable resize functionality to this rectangle too? and when I select this rectangle rectangleSetting.Ui isn't enable too.How can I solve this problems.

Thank you!!!
  • cordsac
  • Вопрос
  • 9 ноября 2017 г. 12:04

How can I implement this project for design Oval shape

qt, c++, oval

I am trying to implement an oval shape like this project .so I inherited Oval Graphics Item from QGraphicsEllipseItem and QObject, and implement logic,same as logic for Rectangle.here is my oval.cpp code,But my project is not working properly.can you explain how can I solve this and,what I need to do.what I did wrong.here with I attached I tested code.please help me sir..

#include "oval.h"
#include <QPainter>
#include <QDebug>
#include <QCursor>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsEllipseItem>
#include <math.h>
#include <dotsignal.h>


static const double Pi = 3.14159265358979323846264338327950288419717;
static double TwoPi = 2.0 * Pi;

static qreal normalizeAngle(qreal angle)
{
    while (angle < 0)
        angle += TwoPi;
    while (angle > TwoPi)
        angle -= TwoPi;
    return angle;
}

oval::oval(QObject *parent) :
    QObject(parent),
    m_cornerFlags(0),
    m_actionFlags(ResizeState)
{
    setAcceptHoverEvents(true);
    setFlags(ItemIsSelectable|ItemSendsGeometryChanges);
    for(int i = 0; i < 8; i++){
        cornerGrabber[i] = new DotSignal(this);
    }
    setPositionGrabbers();
}

oval::~oval()
{
    for(int i = 0; i < 8; i++){
        delete cornerGrabber[i];
    }
}

QPointF oval::previousPosition() const
{
    return m_previousPosition;
}

void oval::setPreviousPosition(const QPointF previousPosition)
{
    if (m_previousPosition == previousPosition)
        return;

    m_previousPosition = previousPosition;
    emit previousPositionChanged();
}

void oval::setRect(qreal x, qreal y, qreal w, qreal h)
{
    setRect(QRectF(x,y,w,h));
}

void oval::setRect(const QRectF &rect)
{
    QGraphicsEllipseItem::setRect(rect);
    if(brush().gradient() != 0){
        const QGradient * grad = brush().gradient();
        if(grad->type() == QGradient::LinearGradient){
            auto tmpRect = this->rect();
            const QLinearGradient *lGradient = static_cast<const QLinearGradient *>(grad);
            QLinearGradient g = *const_cast<QLinearGradient*>(lGradient);
            g.setStart(tmpRect.left() + tmpRect.width()/2,tmpRect.top());
            g.setFinalStop(tmpRect.left() + tmpRect.width()/2,tmpRect.bottom());
            setBrush(g);
        }
    }
}

void oval::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QPointF pt = event->pos();
    if(m_actionFlags == ResizeState){
        switch (m_cornerFlags) {
        case Top:
            resizeTop(pt);
            break;
        case Bottom:
            resizeBottom(pt);
            break;
        case Left:
            resizeLeft(pt);
            break;
        case Right:
            resizeRight(pt);
            break;
        case TopLeft:
            resizeTop(pt);
            resizeLeft(pt);
            break;
        case TopRight:
            resizeTop(pt);
            resizeRight(pt);
            break;
        case BottomLeft:
            resizeBottom(pt);
            resizeLeft(pt);
            break;
        case BottomRight:
            resizeBottom(pt);
            resizeRight(pt);
            break;
        default:
            if (m_leftMouseButtonPressed) {
                setCursor(Qt::ClosedHandCursor);
                auto dx = event->scenePos().x() - m_previousPosition.x();
                auto dy = event->scenePos().y() - m_previousPosition.y();
                moveBy(dx,dy);
                setPreviousPosition(event->scenePos());
                emit signalMove(this, dx, dy);
            }
            break;
        }
    } else {
        switch (m_cornerFlags) {
        case TopLeft:
        case TopRight:
        case BottomLeft:
        case BottomRight: {
            rotateItem(pt);
            break;
        }
        default:
            if (m_leftMouseButtonPressed) {
                setCursor(Qt::ClosedHandCursor);
                auto dx = event->scenePos().x() - m_previousPosition.x();
                auto dy = event->scenePos().y() - m_previousPosition.y();
                moveBy(dx,dy);
                setPreviousPosition(event->scenePos());
                emit signalMove(this, dx, dy);
            }
            break;
        }
    }
    QGraphicsItem::mouseMoveEvent(event);
}

void oval::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    if (event->button() & Qt::LeftButton) {
        m_leftMouseButtonPressed = true;
        setPreviousPosition(event->scenePos());
        emit clicked(this);
    }
    QGraphicsItem::mousePressEvent(event);
}

void oval::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    if (event->button() & Qt::LeftButton) {
        m_leftMouseButtonPressed = false;
    }
    QGraphicsItem::mouseReleaseEvent(event);
}

void oval::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
    m_actionFlags = (m_actionFlags == ResizeState)?RotationState:ResizeState;
    setVisibilityGrabbers();
    QGraphicsItem::mouseDoubleClickEvent(event);
}

void oval::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
    setPositionGrabbers();
    setVisibilityGrabbers();
    QGraphicsItem::hoverEnterEvent(event);
}

void oval::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
    m_cornerFlags = 0;
    hideGrabbers();
    setCursor(Qt::CrossCursor);
    QGraphicsItem::hoverLeaveEvent( event );
}

void oval::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
{
    QPointF pt = event->pos();              // The current position of the mouse
    qreal drx = pt.x() - rect().right();    // Distance between the mouse and the right
    qreal dlx = pt.x() - rect().left();     // Distance between the mouse and the left

    qreal dby = pt.y() - rect().top();      // Distance between the mouse and the top
    qreal dty = pt.y() - rect().bottom();   // Distance between the mouse and the bottom

    // If the mouse position is within a radius of 7
    // to a certain side( top, left, bottom or right)
    // we set the Flag in the Corner Flags Register

    m_cornerFlags = 0;
    if( dby < 7 && dby > -7 ) m_cornerFlags |= Top;       // Top side
    if( dty < 7 && dty > -7 ) m_cornerFlags |= Bottom;    // Bottom side
    if( drx < 7 && drx > -7 ) m_cornerFlags |= Right;     // Right side
    if( dlx < 7 && dlx > -7 ) m_cornerFlags |= Left;      // Left side

    if(m_actionFlags == ResizeState){
        QPixmap p(":/icons/arrow-up-down.png");
        QPixmap pResult;
        QTransform trans = transform();
        switch (m_cornerFlags) {
        case Top:
        case Bottom:
            pResult = p.transformed(trans);
            setCursor(pResult.scaled(24,24,Qt::KeepAspectRatio));
            break;
        case Left:
        case Right:
            trans.rotate(90);
            pResult = p.transformed(trans);
            setCursor(pResult.scaled(24,24,Qt::KeepAspectRatio));
            break;
        case TopRight:
        case BottomLeft:
            trans.rotate(45);
            pResult = p.transformed(trans);
            setCursor(pResult.scaled(24,24,Qt::KeepAspectRatio));
            break;
        case TopLeft:
        case BottomRight:
            trans.rotate(135);
            pResult = p.transformed(trans);
            setCursor(pResult.scaled(24,24,Qt::KeepAspectRatio));
            break;
        default:
            setCursor(Qt::CrossCursor);
            break;
        }
    } else {
        switch (m_cornerFlags) {
        case TopLeft:
        case TopRight:
        case BottomLeft:
        case BottomRight: {
            QPixmap p(":/icons/rotate-right.png");
            setCursor(QCursor(p.scaled(24,24,Qt::KeepAspectRatio)));
            break;
        }
        default:
            setCursor(Qt::CrossCursor);
            break;
        }
    }
    QGraphicsItem::hoverMoveEvent( event );
}

QVariant oval::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
    switch (change) {
    case QGraphicsItem::ItemSelectedChange:
        m_actionFlags = ResizeState;
        break;
    default:
        break;
    }
    return QGraphicsItem::itemChange(change, value);
}


void oval::resizeLeft(const QPointF &pt)
{
    QRectF tmpRect = rect();
    // if the mouse is on the right side we return
    if( pt.x() > tmpRect.right() )
        return;
    qreal widthOffset =  ( pt.x() - tmpRect.right() );
    // limit the minimum width
    if( widthOffset > -10 )
        return;
    // if it's negative we set it to a positive width value
    if( widthOffset < 0 )
        tmpRect.setWidth( -widthOffset );
    else
        tmpRect.setWidth( widthOffset );
    // Since it's a left side , the rectange will increase in size
    // but keeps the topLeft as it was
    tmpRect.translate( rect().width() - tmpRect.width() , 0 );
    prepareGeometryChange();
    // Set the ne geometry
    setRect( tmpRect );
    // Update to see the result
    update();
    setPositionGrabbers();
}

void oval::resizeRight(const QPointF &pt)
{
    QRectF tmpRect = rect();
    if( pt.x() < tmpRect.left() )
        return;
    qreal widthOffset =  ( pt.x() - tmpRect.left() );
    if( widthOffset < 10 ) /// limit
        return;
    if( widthOffset < 10)
        tmpRect.setWidth( -widthOffset );
    else
        tmpRect.setWidth( widthOffset );
    prepareGeometryChange();
    setRect( tmpRect );
    update();
    setPositionGrabbers();
}

void oval::resizeBottom(const QPointF &pt)
{
    QRectF tmpRect = rect();
    if( pt.y() < tmpRect.top() )
        return;
    qreal heightOffset =  ( pt.y() - tmpRect.top() );
    if( heightOffset < 11 ) /// limit
        return;
    if( heightOffset < 0)
        tmpRect.setHeight( -heightOffset );
    else
        tmpRect.setHeight( heightOffset );
    prepareGeometryChange();
    setRect( tmpRect );
    update();
    setPositionGrabbers();
}

void oval::resizeTop(const QPointF &pt)
{
    QRectF tmpRect = rect();
    if( pt.y() > tmpRect.bottom() )
        return;
    qreal heightOffset =  ( pt.y() - tmpRect.bottom() );
    if( heightOffset > -11 ) /// limit
        return;
    if( heightOffset < 0)
        tmpRect.setHeight( -heightOffset );
    else
        tmpRect.setHeight( heightOffset );
    tmpRect.translate( 0 , rect().height() - tmpRect.height() );
    prepareGeometryChange();
    setRect( tmpRect );
    update();
    setPositionGrabbers();
}

void oval::rotateItem(const QPointF &pt)
{
    QRectF tmpRect = rect();
    QPointF center = boundingRect().center();
    QPointF corner;
    switch (m_cornerFlags) {
    case TopLeft:
        corner = tmpRect.topLeft();
        break;
    case TopRight:
        corner = tmpRect.topRight();
        break;
    case BottomLeft:
        corner = tmpRect.bottomLeft();
        break;
    case BottomRight:
        corner = tmpRect.bottomRight();
        break;
    default:
        break;
    }

    QLineF lineToTarget(center,corner);
    QLineF lineToCursor(center, pt);
    // Angle to Cursor and Corner Target points
    qreal angleToTarget = ::acos(lineToTarget.dx() / lineToTarget.length());
    qreal angleToCursor = ::acos(lineToCursor.dx() / lineToCursor.length());

    if (lineToTarget.dy() < 0)
        angleToTarget = TwoPi - angleToTarget;
    angleToTarget = normalizeAngle((Pi - angleToTarget) + Pi / 2);

    if (lineToCursor.dy() < 0)
        angleToCursor = TwoPi - angleToCursor;
    angleToCursor = normalizeAngle((Pi - angleToCursor) + Pi / 2);

    // Result difference angle between Corner Target point and Cursor Point
    auto resultAngle = angleToTarget - angleToCursor;

    QTransform trans = transform();
    trans.translate( center.x(), center.y());
    trans.rotateRadians(rotation() + resultAngle, Qt::ZAxis);
    trans.translate( -center.x(),  -center.y());
    setTransform(trans);
}

void oval::setPositionGrabbers()
{
    QRectF tmpRect = rect();
    cornerGrabber[GrabberTop]->setPos(tmpRect.left() + tmpRect.width()/2, tmpRect.top());
    cornerGrabber[GrabberBottom]->setPos(tmpRect.left() + tmpRect.width()/2, tmpRect.bottom());
    cornerGrabber[GrabberLeft]->setPos(tmpRect.left(), tmpRect.top() + tmpRect.height()/2);
    cornerGrabber[GrabberRight]->setPos(tmpRect.right(), tmpRect.top() + tmpRect.height()/2);
    cornerGrabber[GrabberTopLeft]->setPos(tmpRect.topLeft().x(), tmpRect.topLeft().y());
    cornerGrabber[GrabberTopRight]->setPos(tmpRect.topRight().x(), tmpRect.topRight().y());
    cornerGrabber[GrabberBottomLeft]->setPos(tmpRect.bottomLeft().x(), tmpRect.bottomLeft().y());
    cornerGrabber[GrabberBottomRight]->setPos(tmpRect.bottomRight().x(), tmpRect.bottomRight().y());
}

void oval::setVisibilityGrabbers()
{
    cornerGrabber[GrabberTopLeft]->setVisible(true);
    cornerGrabber[GrabberTopRight]->setVisible(true);
    cornerGrabber[GrabberBottomLeft]->setVisible(true);
    cornerGrabber[GrabberBottomRight]->setVisible(true);

    if(m_actionFlags == ResizeState){
        cornerGrabber[GrabberTop]->setVisible(true);
        cornerGrabber[GrabberBottom]->setVisible(true);
        cornerGrabber[GrabberLeft]->setVisible(true);
        cornerGrabber[GrabberRight]->setVisible(true);
    } else {
        cornerGrabber[GrabberTop]->setVisible(false);
        cornerGrabber[GrabberBottom]->setVisible(false);
        cornerGrabber[GrabberLeft]->setVisible(false);
        cornerGrabber[GrabberRight]->setVisible(false);
    }
}

void oval::hideGrabbers()
{
    for(int i = 0; i < 8; i++){
        cornerGrabber[i]->setVisible(false);
    }
}
  • cordsac
  • Вопрос
  • 18 октября 2017 г. 17:03

How can I select the QGraphicView Item and change the properties

qt, c++

How can I select the QGraphicView items using mouse and change the properties(size,color).In this code I create Rectangles when the button clicks.But now I need to change properties of the rectangles.How can I select the each rectangle shapes using mouse and change the properties of the each one.


void Widget::on_btnCreateRect_clicked()
{

    QBrush blueBrush(Qt::green);
    QPen blackPen(Qt::black);
    blackPen.setWidth(2);

    rect = ui->graphicsView->scene()->addRect(-10,-10,250,100,blackPen);
    rect->setFlag(QGraphicsItem::ItemIsMovable, true);
}

http://doc.qt.io/qt-5/qtwidgets-graphicsview-diagramscene-example.html In this example it can select square shapes and change the color of each squares.I need to do same thing and change the size of each shape,but I have no idea to do it.how can I do it?
  • EVILEG
  • Тест
  • 17 октября 2017 г. 7:34

Qt - Тест 001. Сигналы и слоты

Qt, c++, сигнал, слот

Тестирование по базовому функционалу Qt. Применение сигналов и слотов в Qt/C++.
  • Cobra91151
  • Вопрос
  • 7 октября 2017 г. 10:28

Проблема при подключении к WiFi сетям

c++, qt, windows-application

Здравствуйте! Проблема в том что при реестрации соединения нужно выслать сигнал со статической функции.

Код:

WirelessConnect.h
static void WINAPI notificationCallBack(PWLAN_NOTIFICATION_DATA wlanData, PVOID context);
WirelessConnect.cpp DWORD dwResult = 0; dwResult = WlanRegisterNotification(hClient, WLAN_NOTIFICATION_SOURCE_ALL, TRUE, notificationCallBack, NULL, NULL, &dwPrevNotif); void WINAPI WirelessConnect::notificationCallBack(PWLAN_NOTIFICATION_DATA wlanData, PVOID context) { context = NULL; switch (wlanData->NotificationCode) { case wlan_notification_acm_connection_complete: emit apConnectionComplete(); qDebug() << "Connected!"; break; case wlan_notification_acm_connection_attempt_fail: emit apConnectionFailed(); qDebug() << "Failed!"; break; default: break; } } Test.cpp: WirelessConnect *wirelessAPConnect = new WirelessConnect(); connect(wirelessAPConnect, &WirelessConnect::apConnectionComplete, setAPConnection); connect(wirelessAPConnect, &WirelessConnect::apConnectionFailed, setAPConnectionFailed);

Ошибка: error: C2355: 'this': can only be referenced inside non-static member functions or non-static data member initializers.

Делал по другому:

dwResult = WlanRegisterNotification(hClient, WLAN_NOTIFICATION_SOURCE_ALL, TRUE, notificationCallBack, this, NULL, &dwPrevNotif);

void WINAPI WirelessConnect::notificationCallBack(PWLAN_NOTIFICATION_DATA wlanData, PVOID context)
{
    WirelessConnect *pThis = (WirelessConnect*)context;
    switch (wlanData->NotificationCode) {
        case wlan_notification_acm_connection_complete:
            pThis->apConnectionComplete();
        break;

        case wlan_notification_acm_connection_attempt_fail:
            pThis->apConnectionFailed();
        break;

        default:
            break;
    }
}

WLAN_CONNECTION_PARAMETERS connectionParameters;
connectionParameters.wlanConnectionMode = wlan_connection_mode_profile;
connectionParameters.strProfile = apName.toStdWString().c_str();
connectionParameters.dwFlags = 0;
connectionParameters.pDot11Ssid = NULL;
connectionParameters.pDesiredBssidList = 0;
connectionParameters.dot11BssType = dot11_BSS_type_any;
dwResult = WlanConnect(hClient, &pIfInfo->InterfaceGuid, &connectionParameters, NULL);

Сигнал передается но получается что идет или сбой программы позже или пишет что отключено сразу после подключения. Не могу точно проверить через Debugger где получается сбой, так как функция WlanConnect при подключении до сети возращает код 87 (неверный параметр) только в режиме Debug, в режиме Release все работает. Как думаете в чем может быть проблема и как это исправить? Спасибо.
  • Troffe
  • Вопрос
  • 12 сентября 2017 г. 13:42

Title bar

qml, qt, c++

Можно ли в QtQuick убрать\изменить  системный title bar? Если да можно пример пожалуйста.

  • EVILEG
  • Статья
  • 2 сентября 2017 г. 11:25

C++ - Урок 008. Перечисления

c++, enum, enumerations

В дополнение к классам C++ поддерживает перечисления. В современном стандарте C++ поддерживаются как перечисления без области видимости, которые были введены в ранних версиях C++, а также C.

enum ColorTypes {
    Green,
    Yellow,
    Red
};

Так и перечисления с областью видимости

enum class ColorTypes {
    Green,
    Yellow,
    Red
};

Проблема с получением значков для приложений

qt, c++, windows-application

Здравствуйте! Я хочу получить значки для всех установленных приложений (с помощью реестра) в Windows. Проблема в: QObject :: connect: не удается поставить в очередь аргументы типа 'QList ' (Убедитесь, что «QList » зарегистрирован с помощью qRegisterMetaType ().) Я подключаю данные из класса Worker QThread *programsThread = new QThread(); Worker *programsWorker = new Worker(); programsWorker->moveToThread(programsThread); connect(programsWorker, &Worker::appData, this, &Test::setAppData); QList programIcons; emit appData(programIcons, displayNames, displayVersions, publishers, installLocation, uninstallLocations); в `Test` классе записую данные в `QTreeWidgetItem` (`QTreeWidget`) void setAppData(QList icons, QStringList names, QStringList versions, QStringList publishers, QString installLocation, QStringList uninstallLocations); Как это исправить? Заранее спасибо.

  • Creator
  • Вопрос
  • 3 февраля 2017 г. 13:06

Qml C++

c++, qml

Как показать в Qt Widgets вывести QtQuick? Что бы можно было потом через c++ управлять объектами в qml. Интересует именно как поместить qml в qtwidgets. Делал когда то раньше, но забыл как.

  • MinusNull
  • Вопрос
  • 25 июля 2016 г. 11:19

Проблема с QSpacerItem

c++, QSpacerItem, Qt

Добрый день. Появляется окно “Прекращена работы программы…” после закрытия окна. Это связано с неправильным использованием указателей?
Это происходит, когда в один QHBoxLayout добавляю один и тот же QSpaserItem. Когда добавляю его только один раз, подобной ошибки не происходит.
Ниже код как пример. Разве мне следует создавать два разных QSpaserItem, для того чтобы добавить его слева и справа и не выводило подобной ошибки?
В Qt 5.3.2 подобной ошибки не возникало, это происходит в Qt 5.5.1.

#include "widget.h"
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    button = new QPushButton("Слева и справа Spaser");
    hbox = new QHBoxLayout(this);
    spaser = new QSpacerItem(100, 0);
 
    hbox->addSpacerItem(spaser);
    hbox->addWidget(button);
    hbox->addSpacerItem(spaser);
 
}
 
Widget::~Widget()
{
}

Реклама

Qt - Тест 001. Сигналы и слоты

  • Результат 0 баллов
  • Очки рейтинга -10
  • boa
  • 10 декабря 2017 г. 3:04

Qt - Тест 001. Сигналы и слоты

  • Результат 84 баллов
  • Очки рейтинга 4
  • Shalfy
  • 8 декабря 2017 г. 14:05

Qt - Тест 001. Сигналы и слоты

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
  • EVILEG
  • 7 декабря 2017 г. 9:47

Django - Урок 011. Добавление комментариев на сайт с Django

Визуальный пример чего? комментариев? При ответе на конкретный комментарий рядом с ником отвечающего будет стрелочка и указание ник другого пользователя. Который будет ссылкой на коммента...

  • Bernar
  • 7 декабря 2017 г. 9:24

Django - Урок 011. Добавление комментариев на сайт с Django

есть визуальный пример ?

  • EVILEG
  • 6 декабря 2017 г. 11:30

Django - Урок 011. Добавление комментариев на сайт с Django

Да, так будет даже лучше, я на сайте уже обновил до такого вида код Вот это уже не нужно if request.method == 'POST': Поскольку Вы и так используете метод post, то есть эта про...

  • Bernar
  • 6 декабря 2017 г. 11:19

Django - Урок 011. Добавление комментариев на сайт с Django

сделал немного по другому class EArticleView(View): template_name = 'knowledge/article.html' comment_form = CommentForm def get(self, request, *args, **kwargs): ...

Сейчас обсуждают на форуме

Как значение текущего элемента ListView получить вне ListView

Вот реально огромное спасибо!! У вас большое терпение с нами возиться и отзывчивость.

  • EVILEG
  • 11 декабря 2017 г. 8:09

QCustomPlot исчезает часть графика при перестроении

Объявить volumeAxisRect в заголовочном файле

  • EVILEG
  • 9 декабря 2017 г. 21:24

Как написать парсер страницы при помощи js

Эм... лично я даже растерялся от такого вопроса... У javascript есть методы типо document.getElementById document.getElementByTag, которые выбирают нужные теги и мож...

Ошибки при многопоточном запуске функции библиотке

Большое спасибо, так заработало QFuture<void> Perebor2 = QtConcurrent::map(Perebor,[=](const double& d){ StrategyCod(d,this);});

  • grig_p
  • 8 декабря 2017 г. 12:49

Прерывание таймера в режиме singleShot

спасибо. У меня логика такая, что таймер я должен перезапустить по определенному событию. То есть, событие, запускающее таймер, при срабатывании в период его ожидания, должно запустить таймер ...