QPainter |
Здравствуйте, гость ( Вход | Регистрация )
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; } }
Прикрепленные файлы
|
|
|
wiz29 |
3.8.2015, 16:52
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
MyLabel *l; - я так понимаю должен отображаться на главном окне. Но, поскольку, объект создается как независимое окно и не вызывается метод show, его просто не видно.
код как минимум надо исправить похожим образом. Сообщение отредактировал wiz29 - 3.8.2015, 16:53 |
|
|
Текстовая версия | Сейчас: 30.1.2025, 4:46 |