KM
Katty Misik1 сентября 2020 г. 6:22

QPoint с файла передать в QPainter

QPainter

как числа x y можно было бы передать как QPoint в QPainter? заранее спасибо!

void ToolBar::on_pushButton_clicked()
{
    QFile file("C:/Users/kamil/Desktop/data2.txt");

    if(file.open(QIODevice::ReadOnly | QFile::Text)){

        QTextStream  in(&file);

        while (!in.atEnd())

        {

            QString line = in.readLine();

            QStringList coordinateStrList  = line.split(':');

            if(coordinateStrList .count()!=2) return;
            QStringList xy1 = coordinateStrList .at(0).split(',');
            QStringList xy2 = coordinateStrList .at(1).split(',');

            QPointF point(xy1.at(0).toDouble(), xy1.at(1).toDouble());
            QPointF point1(xy2.at(0).toDouble(), xy2.at(1).toDouble());

            QRectF rectangle;

            auto x1=QString(xy1[0]).toDouble();
            auto y1=QString(xy1[1]).toDouble();
            auto x2=QString(xy2[0]).toDouble();
            auto y2=QString(xy2[1]).toDouble();



            qDebug()<< x1;
            qDebug()<< y1;

            qDebug()<< x2;
            qDebug()<< y2;


void QImageWidget::paintEvent(QPaintEvent *event)

{

    QWidget::paintEvent(event);

    QPainter painter(this);

    painter.setRenderHint(QPainter::Antialiasing);

    if(_originalImage.isNull()){

        painter.drawText(rect(),Qt::AlignCenter, _noImageMessage);

        return;


    }

    painter.drawPixmap(0,0, this->size().width(), this->size().height(), _originalImage);



    if (Rectangling) {

        painter.setPen(Qt::blue);

        creatorRectangle.setTopLeft(lastPoint);

        creatorRectangle.setBottomRight(endPos);

        painter.drawRect(creatorRectangle);



        //     creatorRectangle.setTopLeft(QPointF(point));

        //   creatorRectangle.setBottomRight(point);

        //    painter.drawRect(creatorRectangle);

    }

    if (Circling) {

        painter.setPen(Qt::NoPen);

        creatorRectangle.setTopLeft(lastPoint);

        creatorRectangle.setBottomRight(endPos);

        painter.drawRect(creatorRectangle);

        painter.setPen(Qt::black);

        painter.drawEllipse(creatorRectangle);

    }

    if (Triangling!=0) {

        if(Triangling==1) {


            painter.drawLine(QLineF(lastPoint,endPos));


        }  if(Triangling==2) {


            painter.drawLine(currentTriangle.getLines()[0]);

            painter.drawLine(QLineF(currentTriangle.getLines()[0].p2(),endPos));

            painter.drawLine(QLineF(currentTriangle.getLines()[0].p1(),endPos));

        }

    }


    foreach(QRectF rectangle, rects) {


        painter.setPen(Qt::blue);

        painter.drawRect(rectangle);


        saveboxcontrol=true;

        SaveFile("C:/Users/kamil/Desktop/data.txt");

        saveboxcontrol=true;

        SaveFile2("C:/Users/kamil/Desktop/data2.txt");

    }


    foreach(QRectF circle, circles) {


        painter.setPen(Qt::blue);

        painter.drawEllipse(circle);

        saveboxcontrol=true;

        SaveFile("C:/Users/kamil/Desktop/circledata.txt");

        saveboxcontrol=true;

        SaveFile2("C:/Users/kamil/Desktop/circledata2.txt");


    }

    foreach(TriangleToDraw triangle, triangles){


        painter.setPen(Qt::blue);

        painter.drawLines(triangle.getLines(),3);


        saveboxcontrol=true;

        SaveFile3("C:/Users/kamil/Desktop/triangledata.txt");


    }


}
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

9
Evgenii Legotckoi
  • 1 сентября 2020 г. 14:02

Добрый день

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

То есть в заголовочном файле, что-то типо такого будет

class QImageWidget
{
public:
    void setPoints(const QPoint& p1, const QPoint& p2);

private:
    QPoint m_point_1;
    QPoint m_point_2;
}

А в файле реализации так

void QImageWidget::setPoints(const QPoint& p1, const QPoint& p2)
{
    m_point_1 = p1;
    m_point_2 = p2;

    update(); Вызывать этот метод, чтобы запустить перерисовку виджета
}

А в методе update уже сможете использовать эти переменные.

    KM
    • 2 сентября 2020 г. 1:22
    • (ред.)

    все равно не получаеться, =(

    #include "qimagewidget.h"
    
    #include <QMouseEvent>
    
    #include <QPainter>
    
    #include <QFileDialog>
    
    #include <QGraphicsScene>
    
    #include <QDebug>
    
    #include "QLineF"
    
    #include <QResizeEvent>
    
    #include <QDial>
    
    #include <QMessageBox>
    
    #include <QObject>
    
    #include <QFile>
    
    #include <QTextStream>
    
    #include <QDrag>
    
    #include<QDataStream>
    
    #include <QString>
    
    #include <QPushButton>
    
    #include <QWidget>
    
    #include "toolbar.h"
    
    
    QImageWidget::QImageWidget(ToolBar *toolB, QWidget *parent) : QWidget(parent), toolBar(toolB), currentTriangle()
    
    {
    
    
        _noImageMessage = "No image";
    
        _Tomany = "You can't draw both";
    
        _noFigureMessage = "You didn't peak any figure";
    
        _backgroundColor = Qt::white;
    
        _Color = Qt::black;
    
        _margin = 4;
    
        //  connect(this, SIGNAL(marginChanged()), SLOT(repaint()));
    
       // QObject::connect(cA, SIGNAL(sgFromA(int)), cB, SLOT(slotB(int)));
       // QObject::connect(pushButton, SIGNAL(clicked()), t, QString("1" + str).toLatin1());
    }
    
    
    QImageWidget::~QImageWidget()
    
    {
    
    
    }
    
    QRect QImageWidget::actualImageRect()
    
    {
    
        QRect imageRect = rect();
    
        imageRect.setSize(_originalImage.size().scaled(size(), Qt::KeepAspectRatio));
    
        imageRect.moveCenter(rect().center());
    
        return imageRect;
    
    
    }
    
    
    void QImageWidget::updateMargins()
    
    {
    
        double ratio = (double)_originalImage.height()/_originalImage.width();
    
        int hMargin = _margin * ratio;
    
        int vMargin = _margin;
    
        _margins.setBottom(hMargin);
    
        _margins.setTop(hMargin);
    
        _margins.setRight(vMargin);
    
        _margins.setLeft(vMargin);
    
    
    }
    
    
    void QImageWidget::setPixmap(QPixmap pixmap)
    
    {
    
        _originalImage = pixmap;
    
        updateMargins();
    
    
    }
    
    
    void QImageWidget::SaveFile(QString filepath){
    
        QFile file(filepath);
    
        if(file.open(QIODevice::WriteOnly))
    
        {
    
    
            QTextStream  out(&file);
    
    
            for(int i=0; i<rects.count(); i++) {
    
    
                out<< QString::number(rects[i].topLeft().x())+","+
    
    
                      QString::number(rects[i].topLeft().y())+":"+
    
    
                      QString::number(rects[i].bottomRight().x()) + ","+
    
    
                      QString::number(rects[i].bottomRight().y()) + "\n" ;
    
    
            }
    
            //   for(int i=0; i<circles.count(); i++) {
    
    
            //   out<< QString::number(circles[i].topLeft().x())+","+
    
    
            //      QString::number(circles[i].topLeft().y())+"/"+
    
    
            //      QString::number(circles[i].bottomRight().x()) + ","+
    
    
            //    QString::number(circles[i].bottomRight().y()) + "\n" ;
    
            //  }
    
    
    
            file.close();
    
    
        }
    
    }
    
    
    void QImageWidget::SaveFile2(QString filepath2){
    
    
    
        QFile file(filepath2);
    
        if(file.open(QIODevice::WriteOnly))
    
        {
    
    
            QTextStream  out(&file);
    
    
            for(int i=0; i<rects.count(); i++) {
    
                qreal propYN = (static_cast<double>(size().height() /static_cast<double>(1000)));
    
                qreal propXN = (static_cast<double>(size().width() / static_cast<double>(1000)));
    
    
                out<< QString::number((rects[i].left()*propYN), 'f', 0)+","+
    
                      QString::number((rects[i].top()*propYN), 'f', 0) +":"+
    
                      QString::number((rects[i].right()*propXN), 'f', 0) + ","+
    
                      QString::number((rects[i].bottom()*propYN),  'f', 0)+"\n" ;
    
            }
    
            //    for(int i=0; i<circles.count(); i++) {
    
            //      qreal propYN = (static_cast<double>(size().height() /static_cast<double>(1000)));
    
            //      qreal propXN = (static_cast<double>(size().width() / static_cast<double>(1000)));
    
    
            //     out<< QString::number((circles[i].left()*propYN), 'f', 0)+","+
    
            //        QString::number((circles[i].top()*propYN), 'f', 0) +"/"+
    
            //        QString::number((circles[i].right()*propXN), 'f', 0) + ","+
    
            //  QString::number((circles[i].bottom()*propYN),  'f', 0)+"\n" ;
    
            //  }
    
    
    
    
    
    
            file.close();
    
        }
    
    
    }
    
    
    void QImageWidget::SaveFile3(QString filepath3){
    
    
    
        QFile file(filepath3);
    
        if(file.open(QIODevice::WriteOnly))
    
        {
    
    
            QTextStream out(&file);
    
    
            for(int i=0; i<triangles.count(); i++) {
    
    
                out<< triangles[i].ToSave();
    
    
            }
    
    
            file.close();
    
        }
    
    
    }
    
    
    
    
    void QImageWidget::SaveFile4(QString filepath4){
    
    
    
        QFile file(filepath4);
    
        if(file.open(QIODevice::WriteOnly))
    
        {
    
    
            QTextStream  out(&file);
    
    
    
            for(int i=0; i<triangles.count(); i++) {
    
                qreal propYN = (static_cast<double>(size().height() /static_cast<double>(1000)));
    
                qreal propXN = (static_cast<double>(size().width() / static_cast<double>(1000)));
    
    
    
                out<< QString::number((triangles[i].getPoints()[0].y()*propYN), 'f', 0)+","+
    
                        QString::number((triangles[i].getPoints()[0].x()*propXN), 'f', 0)+","+
    
                        QString::number((triangles[i].getPoints()[1].y()*propYN), 'f', 0)+","+
    
                        QString::number((triangles[i].getPoints()[1].x()*propXN), 'f', 0)+","+
    
                        QString::number((triangles[i].getPoints()[2].y()*propYN), 'f', 0)+","+
    
                        QString::number((triangles[i].getPoints()[2].x()*propXN), 'f', 0)+"\n" ;
    
            }
    
    
    
    
    
    
            file.close();
    
        }
    
    
    }
    
    
    
    
    //void QImageWidget::UploadPointsToConfig1() {
    
    
    //  UploadPoints1("C:/Users/kamil/Desktop/data.txt");
    
    
    
    //}
    
    //void QImageWidget::UploadPointsToConfig1() {
    
    
    //  UploadPoints("C:/Users/kamil/Desktop/triangledata.txt");
    
    
    
    //}
    
    /*
    void QImageWidget::UploadPoints(QString filepathtoupload){
    
    
        QFile file(filepathtoupload);
    
        if(file.open(QIODevice::ReadOnly | QFile::Text)){
    
    
            QTextStream  in("C:/Users/kamil/Desktop/data.txt");
    
            while (!in.atEnd())
    
            {
    
                QString line = in.readLine();
                rects.append(RectToDraw(line,':',','));
    
             //   qDebug()<<  (RectToDraw(line,':',','));
            }
    
            file.close();
        }
    
    }
    
    */
    void ToolBar::on_pushButton_clicked()
    {
        QFile file("C:/Users/kamil/Desktop/data2.txt");
    
        if(file.open(QIODevice::ReadOnly | QFile::Text)){
    
            QTextStream  in(&file);
    
            while (!in.atEnd())
    
            {
    
                QString line = in.readLine();
    
                QStringList coordinateStrList  = line.split(':');
    
                if(coordinateStrList .count()!=2) return;
                QStringList xy1 = coordinateStrList .at(0).split(',');
                QStringList xy2 = coordinateStrList .at(1).split(',');
    
                QPointF Npoint(xy1.at(0).toDouble(), xy1.at(1).toDouble());
                QPointF Npoint1(xy2.at(0).toDouble(), xy2.at(1).toDouble());
    
           //     QRectF rectangle;
    
                auto x1=QString(xy1[0]).toDouble();
                auto y1=QString(xy1[1]).toDouble();
                auto x2=QString(xy2[0]).toDouble();
                auto y2=QString(xy2[1]).toDouble();
    
                qDebug()<< Npoint;
                qDebug()<< Npoint1;
    
                qDebug()<< x1;
                qDebug()<< y1;
    
                qDebug()<< x2;
                qDebug()<< y2;
    
            }
    
            file.close();
    
        }
    }
    
    
    
    void QImageWidget::setPoints(const QPoint& p1, const QPoint& p2)
    {
        m_point_1 = p1;
        m_point_2 = p2;
    
        update();
    }
    
    //void QImageWidget::UploadPoints1(QString filepathtoupload){
    
    
    //  QFile file(filepathtoupload);
    
    //if(file.open(QIODevice::ReadOnly | QFile::Text)){
    
    //  QTextStream  in(&file);
    
    //while (!in.atEnd())
    
    //{
    
    //  QString line = in.readLine();
    //circles.append(RectToDraw(line,'/',','));
    
    
    //rects.append(RectToDraw(line,':',','));
    
    //}
    
    //file.close();
    
    //}
    
    
    //}
    
    
    void QImageWidget::mouseMoveEvent(QMouseEvent *event)
    
    {
    
    
        if (Rectangling || Circling || Triangling>0) {
    
            endPos = event->pos();
    
        }
    
    
    
        QWidget::update();
    
    }
    
    
    void QImageWidget::drawRect(const QPoint &endPoint) {
    
        endPos = endPoint;
    
    
    }
    
    void QImageWidget::drawRectangle(const QPoint &endPoint) {
    
        endPos = endPoint;
    
    
    }
    
    
    void QImageWidget::drawEllipse(const QPoint &creatorRect) {
    
        drawRect(creatorRect);
    
    
    }
    
    void QImageWidget::drawTriangle(const QPoint &endPoint) {
    
        lastPoint = endPoint;
    
    
    }
    
    
    void QImageWidget::mousePressEvent(QMouseEvent *event)
    
    {
    
    
        if (event->button() == Qt::LeftButton)
    
        {
    
    
            if(toolBar->isTriangleEnabled()) {
    
                lastPoint = event->pos();
    
                if(Triangling==0) {
    
                    Triangling=1;
    
                }
    
    
            }
    
            if(toolBar->isCircleEnabled()) {
    
                lastPoint = event->pos();
    
                Circling=true;
    
                RectanglingforCircle=true;
    
                Triangling=0;
    
            }
    
    
            if(toolBar->isrectanglingEnabled()) {
    
                lastPoint = event->pos();
    
                Rectangling=true;
    
                Triangling=0;
    
            }
    
    
            if (toolBar->isSaveBoxEnabled()){
    
                saveboxcontrol=true;
    
                SaveFile("C:/Users/kamil/Desktop/data.txt");
    
            }
    
    
            if (toolBar->isSaveBoxEnabled()){
    
                saveboxcontrol=true;
    
                SaveFile2("C:/Users/kamil/Desktop/data2.txt");
    
    
            }
    
        }
    
    }
    
    
    void QImageWidget::mouseReleaseEvent(QMouseEvent *event)
    
    {
    
        if (event->button() == Qt::LeftButton && Rectangling) {
    
            rects.append(creatorRectangle);
    
            creatorRectangle.setTopLeft(QPoint(0,0));
    
    
    
    
            creatorRectangle.setBottomRight(QPoint(0,0));
    
            Rectangling=false;
    
            QWidget::update();
    
        }
    
    
        if (event->button() == Qt::LeftButton && Circling) {
    
            circles.append(creatorRectangle);
    
            creatorRectangle.setTopLeft(QPoint(0,0));
    
            creatorRectangle.setBottomRight(QPoint(0,0));
    
    
    
            Circling=false;
    
            QWidget::update();
    
        }
    
    
        if (event->button() == Qt::LeftButton && Triangling!=0) {
    
            if(Triangling==1) {
    
    
                currentTriangle.setPoint(0, lastPoint);
    
                currentTriangle.setPoint(1, event->pos());
    
    
    
                Triangling++;
    
    
            }
    
            else if(Triangling==2) {
    
    
                currentTriangle.setPoint(2,lastPoint);
    
                Triangling=0;
    
                triangles.append(currentTriangle);
    
    
            }
    
    
            if(Triangling>2) Triangling=0;
    
    
            QWidget::update();
    
    
        }
    
    }
    
    
    void QImageWidget::mouseDoubleClickEvent(QMouseEvent *event)
    
    {
    
        if (event->button()!=Qt::LeftButton)
    
            return;
    
        QString filename = QFileDialog::getOpenFileName(this);
    
        if(filename.isEmpty())
    
            return;
    
        setPixmap(QPixmap(filename));
    
    }
    
    
    void QImageWidget::resizeEvent(QResizeEvent *event)
    
    {
    
        for(int i=0; i<rects.count(); i++) {
    
    
            qreal propX = (static_cast<double>(event->size().width()) / static_cast<double>(event->oldSize().width()));
    
            qreal propY = (static_cast<double>(event->size().height()) / static_cast<double>(event->oldSize().height()));
    
    
            rects[i].setTopLeft(QPointF(rects[i].left()*propX,rects[i].top()*propY));
    
            rects[i].setBottomRight(QPointF(rects[i].right()*propX,rects[i].bottom()*propY));
    
    
        }
    
        for(int i=0; i<circles.count(); i++) {
    
    
            qreal propX = (static_cast<double>(event->size().width()) / static_cast<double>(event->oldSize().width()));
    
            qreal propY = (static_cast<double>(event->size().height()) / static_cast<double>(event->oldSize().height()));
    
    
            circles[i].setTopLeft(QPointF(circles[i].left()*propX,circles[i].top()*propY));
    
            circles[i].setBottomRight(QPointF(circles[i].right()*propX,circles[i].bottom()*propY));
    
        }
    
    
        for(int i=0; i<triangles.count(); i++) {
    
    
            qreal propX = (static_cast<double>(event->size().width()) / static_cast<double>(event->oldSize().width()));
    
            qreal propY = (static_cast<double>(event->size().height()) / static_cast<double>(event->oldSize().height()));
    
    
            triangles[i].setPoint(0, QPointF(triangles[i].getPoints()[0].x()*propX, triangles[i].getPoints()[0].y()*propY));
    
            triangles[i].setPoint(1, QPointF(triangles[i].getPoints()[1].x()*propX, triangles[i].getPoints()[1].y()*propY));
    
            triangles[i].setPoint(2, QPointF(triangles[i].getPoints()[2].x()*propX, triangles[i].getPoints()[2].y()*propY));
    
    
        }
    
    
        QImageWidget::update();
    
    
    }
    
    
    void QImageWidget::paintEvent(QPaintEvent *event)
    
    {
    
        QWidget::paintEvent(event);
    
        QPainter painter(this);
    
        painter.setRenderHint(QPainter::Antialiasing);
    
        if(_originalImage.isNull()){
    
            painter.drawText(rect(),Qt::AlignCenter, _noImageMessage);
    
            return;
    
        }
    
        painter.drawPixmap(0,0, this->size().width(), this->size().height(), _originalImage);
    
    
    
        painter.setPen(Qt::blue);
    
        creatorRectangle.setTopLeft(m_point_1);
    
        creatorRectangle.setBottomRight(m_point_2);
    
        painter.drawRect(creatorRectangle);
    
        update();
    
    
    
        if (Rectangling) {
    
            painter.setPen(Qt::blue);
    
            creatorRectangle.setTopLeft(lastPoint);
    
            creatorRectangle.setBottomRight(endPos);
    
            painter.drawRect(creatorRectangle);
    
    
        }
    
        if (Circling) {
    
            painter.setPen(Qt::NoPen);
    
            creatorRectangle.setTopLeft(lastPoint);
    
            creatorRectangle.setBottomRight(endPos);
    
            painter.drawRect(creatorRectangle);
    
            painter.setPen(Qt::black);
    
            painter.drawEllipse(creatorRectangle);
    
        }
    
        if (Triangling!=0) {
    
            if(Triangling==1) {
    
                painter.drawLine(QLineF(lastPoint,endPos));
    
            }  if(Triangling==2) {
    
                painter.drawLine(currentTriangle.getLines()[0]);
    
                painter.drawLine(QLineF(currentTriangle.getLines()[0].p2(),endPos));
    
                painter.drawLine(QLineF(currentTriangle.getLines()[0].p1(),endPos));
    
            }
    
        }
    
        foreach(QRectF rectangle, rects) {
    
    
            painter.setPen(Qt::blue);
    
            painter.drawRect(rectangle);
    
            saveboxcontrol=true;
    
            SaveFile("C:/Users/kamil/Desktop/data.txt");
    
            saveboxcontrol=true;
    
            SaveFile2("C:/Users/kamil/Desktop/data2.txt");
    
        }
    
    
        foreach(QRectF circle, circles) {
    
            painter.setPen(Qt::blue);
    
            painter.drawEllipse(circle);
    
            saveboxcontrol=true;
    
            SaveFile("C:/Users/kamil/Desktop/circledata.txt");
    
            saveboxcontrol=true;
    
            SaveFile2("C:/Users/kamil/Desktop/circledata2.txt");
    
    
        }
    
        foreach(TriangleToDraw triangle, triangles){
    
    
            painter.setPen(Qt::blue);
    
            painter.drawLines(triangle.getLines(),3);
    
            saveboxcontrol=true;
    
            SaveFile3("C:/Users/kamil/Desktop/triangledata.txt");
    
    
        }
    
    
    }
    
    
    
    
    ```lang-cpp
    #ifndef QIMAGEWIDGET_H
    #define QIMAGEWIDGET_H
    
    #include <QWidget>
    #include <QPixmap>
    #include <QMargins>
    #include <QPoint>
    
    #include <QMouseEvent>
    #include "recttodraw.h"
    #include "toolbar.h"
    #include <QLineF>
    
    #include "triangletodraw.h"
    
    
    
    class QImageWidget : public QWidget
    {
        Q_OBJECT
        ToolBar *toolBar;
        QRectF creatorRect, creatorRectangle, new_creatorRectangle;
        QList<RectToDraw> rects, circles;
        TriangleToDraw creatorTriangles;
        QLineF creatorTriangle;
        QPoint endPos;
        QPoint creatorTrial, new_creatorTriangle;
    
    public:
        explicit QImageWidget(ToolBar *toolB, QWidget *parent = nullptr);
        ~QImageWidget();
        explicit QImageWidget(const QPoint &startingPos) :
            new_creatorRectangle(startingPos, startingPos),
            currentTriangle()
        {
            setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
            setAttribute(Qt::WA_TranslucentBackground);
            showMaximized();
        }
    
         void setPoints(const QPoint& p1, const QPoint& p2);
    private:
        QPoint m_point_1;
        QPoint m_point_2;
        QString _noFigureMessage;
        QPixmap _originalImage;
        QString _noImageMessage;
        QString new_data;
        int _margin;
        QList<TriangleToDraw> triangles;
    
        QList<QPoint> pointsList;
        QList<QPointF> pointsList1;
        QMargins _margins;
        int _point;
        QPoint _points;
        QColor _backgroundColor;
        QColor _Color;
        QString _Tomany;
        QPointF previousPoint;
        TriangleToDraw currentTriangle, currentTriangle1;
        QPoint Npoint;
        QPoint Npoint1;
    
        QRect actualImageRect();
        void updateMargins();
        void updatePoints();
    public:
        void setPixmap(QPixmap pixmap);
        QPixmap pixmap(){
            return _originalImage;
        }
    
        int margin(){return _margin;}
        int point(){return _point;}
    
    
    //  void UploadPointsToConfig();
    // void UploadPointsToConfig1();
    signals:
        void pointChanged();
        void marginChanged();
    
    protected:
    
        virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
    
    public:
        QPointF startPoint() const;
        QPointF endPoint() const;
        QLineF angleline, newLine, newLine1, newLine2, newLine3;
        QLineF angleline2;
        QRect m_currentRegion;
        void setStartPoint(const QPointF point);
        void setEndPoint(const QPointF point);
        void SaveFile(QString filepath);
        void SaveFile2(QString filepath2);
        void SaveFile3(QString filepath3);
        void SaveFile4(QString filepath4);
        void emitSlot();
    public slots:
     //   void UploadPoints(QString filepathtoupload);
     //   void UploadPoints1(QString filepathtoupload);
    //public slots:
      //  void on_pushButton_clicked();
    signals:
        void regionSelected(const QRect &);
    private:
        QRect currentRegion;
    
    
    protected:
        void mousePressEvent(QMouseEvent *event) override;
        void mouseMoveEvent(QMouseEvent *event) override;
        void mouseReleaseEvent(QMouseEvent *event) override;
        void paintEvent(QPaintEvent *event) override;
        void resizeEvent(QResizeEvent *event) override;
    
    
    private:
        void drawRectTo(const QPoint &endPoint);
    
        int Triangling = 0;
    
        bool modified = false;
        bool Rectangling = false;
        bool RectanglingforCircle = false;
        bool Circling = false;
        bool saveboxcontrol = false;
        bool uploadcontrol = false;
        int myPenWidth = 1;
        QColor myPenColor = Qt::blue;
        QImage image;
        QPoint lastPoint, PPoint;
        void drawRect(const QPoint &endPoint);
        void drawRectangle(const QPoint &endPoint);
        void drawEllipse(const QPoint &creatorRect);
        void drawTriangle(const QPoint &endPoint);
        void drawLine(const QPoint &endPoint);
    
        void drawLines(const QVector<QLineF> &);
        void drawTriangl(QLineF, QLineF, QLineF);
    
        void setTopRight(const QPointF lastPoint);
        void setTopLeft(const QPointF endPoint);
        void setTopLeft0(const QPointF endPoint);
        void setTopLeft1(const QPointF endPoint);
        void setPoint (const QPointF );
        void setTopRight1(const QPointF lastPoint);
        void setPoints(const QPointF);
        void setPoints1(const QPointF);
        void setPoints2(const QPointF);
        void setLine(const QLineF);
    private slots:
    
    
          // signals:
     //   void on_pushButton_clicked();
    
    };
    
    
    #endif // QIMAGEWIDGET_H
    

    HElp

      Evgenii Legotckoi
      • 2 сентября 2020 г. 3:26

      Не вызывайте update() в методе void QImageWidget::paintEvent(QPaintEvent *event)

      метод update() вызывает перерисовку, а следовательно вызывает paintEvent. Вы таким образом загоняете прогрумму в бесконечную рекурсию

        KM
        • 2 сентября 2020 г. 3:32

        Я убрала апрейд но эт о не корень зла тут=(

        void QImageWidget::paintEvent(QPaintEvent *event)
        
        {
        
            QWidget::paintEvent(event);
        ```lang-cpp
        void ToolBar::on_pushButton_clicked()
        {
        
            QVector<QPoint> pointforect;
        
           // QVector<QPoint> polyPoints;
        
            QFile file("C:/Users/kamil/Desktop/data2.txt");
        
            if(file.open(QIODevice::ReadOnly | QFile::Text)){
        
                QTextStream  in(&file);
        
                while (!in.atEnd())
        
                {
        
                    QString line = in.readLine();
        
                    QStringList coordinateStrList  = line.split(':');
        
                    if(coordinateStrList .count()!=2) return;
                    QStringList xy1 = coordinateStrList .at(0).split(',');
                    QStringList xy2 = coordinateStrList .at(1).split(',');
        
                    QPoint Npoint(xy1.at(0).toDouble(), xy1.at(1).toDouble());
                    QPoint Npoint1(xy2.at(0).toDouble(), xy2.at(1).toDouble());
        
                   qDebug()<< Npoint;
                   qDebug()<< Npoint1;
        
                }
        
                file.close();
        
            }
        }
        
        QPainter painter(this);
        
        painter.setRenderHint(QPainter::Antialiasing);
        
        if(_originalImage.isNull()){
        
            painter.drawText(rect(),Qt::AlignCenter, _noImageMessage);
        
            return;
        
        }
        
        painter.drawPixmap(0,0, this->size().width(), this->size().height(), _originalImage);
        
        painter.drawLine(QPoint(Npoint), QPoint(Npoint1));
        
        painter.setPen(Qt::red);
        
        
        
        
        if (Rectangling) {
        
            painter.setPen(Qt::blue);
        
            creatorRectangle.setTopLeft(lastPoint);
        
            creatorRectangle.setBottomRight(endPos);
        
            painter.drawRect(creatorRectangle);
        
        
        }
        

        ```

          Evgenii Legotckoi
          • 2 сентября 2020 г. 3:42

          Ещё не вижу, чтобы вы воспользовались методом setPoints, вижу его объявление, его реализацию, но не вижу в коде его использования.
          Когда считываете точки, то нужно их передать в виджет. Не так ли? Так что именно это вам и нужно сделать.
          Единственное, не уверен что и того будет достаточно, поскольку нет чёткой формулировки и понимания, чего именно хотите добиться в конечно итоге.

            KM
            • 2 сентября 2020 г. 4:43

            Да я сначала так и попробовала но не получилось, видимо у меня не хватает знаний и понимания чтоб оно работало. Но я еще только учусь. вот опять добавила но все таки не работает, еще p1 p2 в пеинтер тоже не видит.

            void ToolBar::on_pushButton_clicked()
            {
            
                QVector<QPoint> points;
            
            
            
                QFile file("C:/Users/kamil/Desktop/data2.txt");
            
                if(file.open(QIODevice::ReadOnly | QFile::Text)){
            
                    QTextStream  in(&file);
            
                    while (!in.atEnd())
            
                    {
            
                        QString line = in.readLine();
            
                        QStringList coordinateStrList  = line.split(':');
            
                        if(coordinateStrList .count()!=2) return;
                        QStringList xy1 = coordinateStrList .at(0).split(',');
                        QStringList xy2 = coordinateStrList .at(1).split(',');
            
                        QPoint Npoint(xy1.at(0).toDouble(), xy1.at(1).toDouble());
                        QPoint Npoint1(xy2.at(0).toDouble(), xy2.at(1).toDouble());
            
                       qDebug()<< Npoint;
                       qDebug()<< Npoint1;
                       points << QPoint(Npoint1) << QPoint(Npoint);
            
                    }
            
                    file.close();
            
                }
            }
            
            void QImageWidget::setPoints(const QPoint& p1, const QPoint& p2)
            {
                Npoint = p1;
                Npoint1 = p2;
            
                update();
            }
            
            void QImageWidget::paintEvent(QPaintEvent *event)
            
            {
            
                QWidget::paintEvent(event);
            
                QPainter painter(this);
            
                painter.setRenderHint(QPainter::Antialiasing);
            
                if(_originalImage.isNull()){
            
                    painter.drawText(rect(),Qt::AlignCenter, _noImageMessage);
            
                    return;
            
                }
            
                painter.drawPixmap(0,0, this->size().width(), this->size().height(), _originalImage);
            
                QVector<QPoint> points;
                points << QPoint(Npoint1) << QPoint(Npoint);
            
            
            
            
            
               QVector<QPoint> linePoints;
               foreach( QPoint point, points)
               linePoints << point;
            
            
               painter.drawPolyline( points );
               painter.drawLines( linePoints );
            
                 painter.drawLines(points);
            
            
            
              Evgenii Legotckoi
              • 2 сентября 2020 г. 4:58

              Вам нужно почитать про основы C++... здесь нет проблемы в каком-то конкретном месте.
              У вас одна глобальная проблема с пробелами в знаниях по самым базовым вещам.

              Например область видимости.

              Взять к примеру этот кусок кода

              void ToolBar::on_pushButton_clicked()
              {
                  QVector<QPoint> points;
                  QFile file("C:/Users/kamil/Desktop/data2.txt");
              
                  if(file.open(QIODevice::ReadOnly | QFile::Text)){
              
                      QTextStream  in(&file);
                      while (!in.atEnd())
                      {
                          QString line = in.readLine();
                          QStringList coordinateStrList  = line.split(':');
              
                          if(coordinateStrList .count()!=2) return;
                          QStringList xy1 = coordinateStrList .at(0).split(',');
                          QStringList xy2 = coordinateStrList .at(1).split(',');
              
                          QPoint Npoint(xy1.at(0).toDouble(), xy1.at(1).toDouble());
                          QPoint Npoint1(xy2.at(0).toDouble(), xy2.at(1).toDouble());
              
                         qDebug()<< Npoint;
                         qDebug()<< Npoint1;
                         points << QPoint(Npoint1) << QPoint(Npoint);
                      }
                      file.close();
                  }
              }
              
              void QImageWidget::setPoints(const QPoint& p1, const QPoint& p2)
              {
                  Npoint = p1;
                  Npoint1 = p2;
              
                  update();
              }
              

              Первое, что бросается в глаза, так это переменные Npoint и Npoint1. Они используются в обоих методах. И я предположу, что вы считаете эти переменные одними и теми же.
              Однако это не так .

              В методе on_pushButton_clicked эти переменные существуют только внутри тела цикла и пересоздаются при каждом проходе.

              А где объявлены Npoint и Npoint1, которые в setPoints я уже вообще не знаю, вы меня запутали эти горами редактированного перередактированного кода.

              Я предполагал, что ToolBar и QImageWidget у вас где-то находятся. Или что-то одно расположено в чём-то другом.

              У вас оба два этих виджета расположены в MainWindow? Если так, то нужно писать сигнал в ToolBar, который будет высылать точки в MainWindow и MainWindow будет устанавливать с помощью метода setPoints эти точки в QImageWidget.

              Учитесь или не учитесь - не принципиально. Немного притормозите с Qt и почитайте про основы C++... Или того же Страуструпа, книга серьёзная, большая, но читается относительно легко, либо какую-нибудь облегчённую литературу.
              Qt - это библиотека, со своей архитектурой и некоторыми правилами использования, но с пробелами по самому языку браться за неё можно, но будет тяжко.

                KM
                • 2 сентября 2020 г. 5:56
                • (ред.)

                спасибо за совет сделала

                public slots:
                
                    void QParseFileData(const QStringList &data);
                

                сигнал слот теперь данные с тулбара передаю

                void ToolBar::on_pushButton_clicked()
                {
                
                    QVector<QPoint> p1, p2;
                    QFile file("C:/Users/kamil/Desktop/data2.txt");
                    QStringList lineList;
                    if(file.open(QIODevice::ReadOnly | QFile::Text)){
                
                        QTextStream  in(&file);
                
                        while (!in.atEnd())
                        {
                            QString line = in.readLine();
                            lineList.append(line);
                        }
                        emit(dataReady(lineList));
                        file.close();
                    }
                }
                
                

                а аутпут у меня уже готовый рект QRectF(155,65 521x154)
                QRectF(155,65 521x154) Но

                auto rect = RectToDraw(data.at(0),':',',');
                    auto circle = RectToDraw(data.at(0),'/',',');
                    //auto triangles = TriangleToDraw(data.at(0),',');
                
                    //rect.topLeft()
                
                    rects.append(RectToDraw(data.at(0),':',','));
                    circles.append(RectToDraw(data.at(0), '/', ','));
                

                большое спасибо за этот форум!впрям 911
                теперь после отрисовки фигуры меняетьчя текстовый файл на непонятно что
                31.5169,8.89222:1036.27,23.7126
                31.5169,8.89222:1036.27,23.7126
                274,127:687,363
                0,0/0,0
                0,0/0,0
                805,160/393,309

                  Evgenii Legotckoi
                  • 3 сентября 2020 г. 4:56

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

                    Комментарии

                    Только авторизованные пользователи могут публиковать комментарии.
                    Пожалуйста, авторизуйтесь или зарегистрируйтесь
                    d
                    • dsfs
                    • 26 апреля 2024 г. 14:56

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:80баллов,
                    • Очки рейтинга4
                    d
                    • dsfs
                    • 26 апреля 2024 г. 14:45

                    C++ - Тест 002. Константы

                    • Результат:50баллов,
                    • Очки рейтинга-4
                    d
                    • dsfs
                    • 26 апреля 2024 г. 14:35

                    C++ - Тест 001. Первая программа и типы данных

                    • Результат:73баллов,
                    • Очки рейтинга1
                    Последние комментарии
                    k
                    kmssr9 февраля 2024 г. 5:43
                    Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                    АК
                    Анатолий Кононенко5 февраля 2024 г. 12:50
                    Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                    EVA
                    EVA25 декабря 2023 г. 21:30
                    Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                    J
                    JonnyJo25 декабря 2023 г. 19:38
                    Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                    G
                    Gvozdik19 декабря 2023 г. 8:01
                    Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                    Сейчас обсуждают на форуме
                    G
                    Gar22 апреля 2024 г. 15:46
                    Clipboard Как скопировать окно целиком в clipb?
                    DA
                    Dr Gangil Academics20 апреля 2024 г. 17:45
                    Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
                    a
                    a_vlasov14 апреля 2024 г. 16:41
                    Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                    Павел Дорофеев
                    Павел Дорофеев14 апреля 2024 г. 12:35
                    QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                    f
                    fastrex4 апреля 2024 г. 14:47
                    Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

                    Следите за нами в социальных сетях