crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QPainter
Dima1996
  опции профиля:
сообщение 2.8.2015, 23:52
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 2.8.2015
Пользователь №: 4428

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток. Помогите разобраться со средствами рисования а точнее с конкретной задачей. Нужно на изображении(растровой карте) рисовать траекторию движения объекта(какую то ломаную линию). Проблемы: не могу передать данные методом 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;
}
}

Прикрепленные файлы
Прикрепленный файл  h.txt ( 798 байт ) Кол-во скачиваний: 266
Прикрепленный файл  cpp.txt ( 1.49 килобайт ) Кол-во скачиваний: 262
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 3.8.2015, 16:52
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


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);
}


код как минимум надо исправить похожим образом.

Сообщение отредактировал wiz29 - 3.8.2015, 16:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 23:11