Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: n4ela от Февраль 20, 2009, 17:38



Название: Как реализовать систему координат?
Отправлено: n4ela от Февраль 20, 2009, 17:38
Здравствуйте. Встала задача реализивать систему координат. Что бы была ось х и ось у, обе положительные,  и что бы пользователь кликая мышкой мог проставлять точки на этой системе. Есть в QT что нибудь подобное и в какую сторону копать? Мне в голову кроме как сделать дофига маленьких кнопок (типа точки) не чего больше не приходит.


Название: Re: Как реализовать систему координат?
Отправлено: lit-uriy от Февраль 20, 2009, 17:41
см. Qwt (http://qwt.sourceforge.net/index.html)


Название: Re: Как реализовать систему координат?
Отправлено: break от Февраль 20, 2009, 17:46
KPlotWidget еще есть (сам им не пользовался но вам должно подойти)

В Qwt некоторые вещи настолько неочивидно делаются что приходиться всегда перед глазами исходники держать (документация к сожалению представляет собой лишь заголовки функций и описание параметров - оч. плохая)

Мне потребовалось с помощью QwlScaleWidget ось координат нарисовать - 2 часа возился непонимая почему не работает...


Название: Re: Как реализовать систему координат?
Отправлено: AAXEE от Февраль 20, 2009, 21:50
А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.


Название: Re: Как реализовать систему координат?
Отправлено: SABROG от Февраль 20, 2009, 23:17
А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.
Ну в принципе ничто не мешает нарисовать картинку с осями на форму, а по клику мышки рисовать на эту картинку нужные точечки и перерисовывать с точечками. Обычно проблемы начинаются позже, когда начинает хотеться большего...


Название: Re: Как реализовать систему координат?
Отправлено: n4ela от Февраль 20, 2009, 23:28
А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.
На самом деле очень слабо представляю как это будет выглядить. Погуглил на эту тему нашел как рисовать из программы, и как можно реализовать рисование мышкой, но не понял, как сделать нажатие, т.е вот скажем надо взять и поставить точку в координату 1,1, но если делать просто рисование тогда пользователь может хоть рисунок на все окно программы нарисовать(получается паинт какой то). И как мне ловить координаты точек, я могу отследить координату в каком пикселе экрана было сделано нажатие мышки, но это же мне не поможет.
Я вот думаю может можно сделать это как то с QTableWidget, ловить нажатие в определенной ячейки, перекрашивать ее в другой цвет и поидеи адрес ячейки это и будет координата. Но я не уверен что это вобще возможно. Кстасти в таблице есть св-во что бы номер строки отображался справа от таблице, а есть ли то же самое только что бы количествно столбцов отображалось снизу таблицы, а не сверху.


Название: Re: Как реализовать систему координат?
Отправлено: n4ela от Февраль 20, 2009, 23:29
А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.
Ну в принципе ничто не мешает нарисовать картинку с осями на форму, а по клику мышки рисовать на эту картинку нужные точечки и перерисовывать с точечками. Обычно проблемы начинаются позже, когда начинает хотеться большего...
Идею понял, а как тогда ловить значение координаты?


Название: Re: Как реализовать систему координат?
Отправлено: SABROG от Февраль 21, 2009, 00:24
Идею понял, а как тогда ловить значение координаты?
Ты хочешь сделать двухстороннюю связь? Ты кликаешь на форму, чтобы поставить точку и хочешься делая запрос скажем getXY(10, 20) получать ответ есть или нет что-то там?


Название: Re: Как реализовать систему координат?
Отправлено: n4ela от Февраль 21, 2009, 00:42
Не совсем, проверять есть что то там или нет мне не надо. Вот когда я ставлю точку, мне надо знать куда я ее поставил, и не по отношению к монитору, а по отношению к моей системе координат. Вот примерно так должно выглядить (http://pic.ipicture.ru/uploads/090221/vFpXISWYG1.jpg)


Название: Re: Как реализовать систему координат?
Отправлено: AAXEE от Февраль 21, 2009, 20:55
Ну если координаты целочисленные, то я бы внутри виджета сист.координат имел матрицу или список отмеченных координат.
А как ставить точку: где-то на форуме было - найти не могу. Но вот код:
Код:
#include <QApplication>
#include <QPainter>
#include <QImage>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QWidget>


class Pa : public QWidget
{
public:
Pa()
{
pixmap_ = QPixmap( 4096, 4096 );
pixmap_.fill( 0xffffffff );
pen_ = QPen( QBrush( Qt::black ), 5.0f );
}

protected:
void mousePressEvent( QMouseEvent * e )
{
if ( e->button() == Qt::LeftButton )
{
QPainter p( &pixmap_ );
p.setPen( pen_ );
p.drawPoint( e->pos() );
p.end();

lastPoint_ = e->pos();

update();
}
}

void mouseMoveEvent( QMouseEvent * e )
{
if ( e->buttons() & Qt::LeftButton )
{
QPainter p( &pixmap_ );
p.setPen( pen_ );
p.drawLine( lastPoint_, e->pos() );
p.end();

lastPoint_ = e->pos();

update();
}
}

void paintEvent( QPaintEvent * )
{
QPainter p( this );
p.setCompositionMode( QPainter::CompositionMode_Source );
p.drawPixmap( QPoint(), pixmap_ );
}

private:
QPen pen_;
QPixmap pixmap_;
QPoint lastPoint_;
};

int main( int argc, char ** argv )
{
QApplication app( argc, argv );

Pa pa;
pa.show();

return app.exec();
}
Спасибо человеку выложившему этот код, т.к с помощью него я многое понял=)
А с другой стороны код очень простой.
Потом просто преобразуешь систему координат.


Название: Re: Как реализовать систему координат?
Отправлено: n4ela от Февраль 22, 2009, 15:28
Спасибо большое. Вроде разобрался.