Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QPainter
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Dima1996
Доброго времени суток. Помогите разобраться со средствами рисования а точнее с конкретной задачей. Нужно на изображении(растровой карте) рисовать траекторию движения объекта(какую то ломаную линию). Проблемы: не могу передать данные методом void setData(QList<double>,QList<double>) в созданный класс с самой рисовалкой. Извините если некорректно описал проблему.
SQL
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QMainWindow>
#include <QScrollArea>
#include <QLabel>
#include <QApplication>
#include <QPainter>

class MyLabel : public QLabel
{
Q_OBJECT
protected:
void paintEvent(QPaintEvent *e);
private:
QList<double> oxL;
QList<double> oyL;
public slots:
void setData(QList<double>,QList<double>);
};


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QString image;
QPixmap pix;

MyLabel *l;

private slots:

void load_image();


private:
Ui::MainWindow *ui;
QList<double> MainOx;
QList<double> MainOy;

};

#endif // MAINWINDOW_H


SQL
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);


l = new MyLabel;
MainOx.clear();
MainOy.clear();


for(int i=0;i<10;i++) //генерация рандомных точек для проверки
{
MainOx<<rand()%1000;
MainOy<<rand()%1000;
}
l->setData(MainOx,MainOy);//попытка передать два списка точек в класс MyLabel

connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(zoom_image(int)));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(load_image()));
}

MainWindow::~MainWindow()
{
delete ui;
}


void MainWindow::load_image()
{
image = QFileDialog::getOpenFileName(this);

pix=QPixmap(image);
QLabel* label = new MyLabel();

pix=pix.scaled(1500,1500,Qt::KeepAspectRatioByExpanding);
label->setPixmap(QPixmap(pix));
ui->scrollArea->setWidget(label);
}

void MyLabel::setData(QList<double> Mox, QList<double> Moy)
{
oxL = Mox;
oyL = Moy;
this->update();
}
void MyLabel::paintEvent(QPaintEvent *e)
{
QLabel::paintEvent(e);

QPainter painter(this);

painter.setPen(Qt::black);
painter.translate(0,height());
painter.rotate(-90);
int x=0,y=0,xP=0,yP=0;
for(int i=0;i<oxL.count();i++)
{
x=oxL[i];
y=oyL[i];
if(i!=0)
painter.drawLine(xP,yP,x,y);
xP=x; yP=y;
}
}
wiz29
MyLabel *l; - я так понимаю должен отображаться на главном окне. Но, поскольку, объект создается как независимое окно и не вызывается метод show, его просто не видно.

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);


l = new MyLabel;
MainOx.clear();
MainOy.clear();


for(int i=0;i<10;i++) //генерация рандомных точек для проверки
{
MainOx<<rand()%1000;
MainOy<<rand()%1000;
}
l->setData(MainOx,MainOy);//попытка передать два списка точек в класс MyLabel

connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(zoom_image(int)));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(load_image()));
ui->scrollArea->setWidget(l);
}

void MainWindow::load_image()
{
image = QFileDialog::getOpenFileName(this);

pix=QPixmap(image);

pix=pix.scaled(1500,1500,Qt::KeepAspectRatioByExpanding);
l->setPixmap(pix);
}


код как минимум надо исправить похожим образом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.