Russian Qt Forum
Ноябрь 27, 2024, 05:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как реализовать систему координат?  (Прочитано 7294 раз)
n4ela
Гость
« : Февраль 20, 2009, 17:38 »

Здравствуйте. Встала задача реализивать систему координат. Что бы была ось х и ось у, обе положительные,  и что бы пользователь кликая мышкой мог проставлять точки на этой системе. Есть в QT что нибудь подобное и в какую сторону копать? Мне в голову кроме как сделать дофига маленьких кнопок (типа точки) не чего больше не приходит.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Февраль 20, 2009, 17:41 »

см. Qwt
Записан

Юра.
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Февраль 20, 2009, 17:46 »

KPlotWidget еще есть (сам им не пользовался но вам должно подойти)

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

Мне потребовалось с помощью QwlScaleWidget ось координат нарисовать - 2 часа возился непонимая почему не работает...
Записан
AAXEE
Гость
« Ответ #3 : Февраль 20, 2009, 21:50 »

А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.
Записан
SABROG
Гость
« Ответ #4 : Февраль 20, 2009, 23:17 »

А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.
Ну в принципе ничто не мешает нарисовать картинку с осями на форму, а по клику мышки рисовать на эту картинку нужные точечки и перерисовывать с точечками. Обычно проблемы начинаются позже, когда начинает хотеться большего...
Записан
n4ela
Гость
« Ответ #5 : Февраль 20, 2009, 23:28 »

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

А еще можно  QPainterом рисовать. По-моему это самый логичный вариант.
Ну в принципе ничто не мешает нарисовать картинку с осями на форму, а по клику мышки рисовать на эту картинку нужные точечки и перерисовывать с точечками. Обычно проблемы начинаются позже, когда начинает хотеться большего...
Идею понял, а как тогда ловить значение координаты?
Записан
SABROG
Гость
« Ответ #7 : Февраль 21, 2009, 00:24 »

Идею понял, а как тогда ловить значение координаты?
Ты хочешь сделать двухстороннюю связь? Ты кликаешь на форму, чтобы поставить точку и хочешься делая запрос скажем getXY(10, 20) получать ответ есть или нет что-то там?
Записан
n4ela
Гость
« Ответ #8 : Февраль 21, 2009, 00:42 »

Не совсем, проверять есть что то там или нет мне не надо. Вот когда я ставлю точку, мне надо знать куда я ее поставил, и не по отношению к монитору, а по отношению к моей системе координат. Вот примерно так должно выглядить
Записан
AAXEE
Гость
« Ответ #9 : Февраль 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();
}
Спасибо человеку выложившему этот код, т.к с помощью него я многое понял=)
А с другой стороны код очень простой.
Потом просто преобразуешь систему координат.
Записан
n4ela
Гость
« Ответ #10 : Февраль 22, 2009, 15:28 »

Спасибо большое. Вроде разобрался.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.14 секунд. Запросов: 23.