crossplatform.ru

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


  Ответ в Как рисовать в QT?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
PVGDRK Дата 24.11.2010, 9:41
 
Цитата(igor_bogomolov @ 8.11.2010, 12:52) *
Я бы на вашем месте не мучился и использовал для этих целей графическую сцену. Смотреть в сторону QGraphicsView, QGraphicsScene, QGraphicsItem. При помощи этих компонент вашу задачу решить легче.

Спасибо большое, за такой совет. Помучившись немного с QPainter - все таки сделала часть с помощью QGraphicsScene.
Вот возник такой вопрос - у меня на объекте graphicsView выводятся эллипсы... Мне бы нужно внутри каждого эллипса разместить текст, причем так, чтобы при перемещении эллипса мышью текст перемещался вместе с ним... Я правильно понимаю, что нужно создать класс для эллипса а надпись в эллипсе будет объектом этого класса?
и еще интересует вопрос с координатами на сцене... Есть ли методы, позволяющие, после перемещения объекта сцены считать , напрмер, по нажатию кнопки новые координаты объекта? Подскажите, пожалуйста, как это сделать... И еще интересует вопрос про точность задания координат эллипсов ... Может быть есть какие то методы, позволяющие перемещать объект мышью с определнным шагом? Эллипсы будут перемещаться с помощью мыши по двум осям X или Y... с шагом 0,5 ... мне придется анализировать в какой интервал попал эллипс и преобразовывать его координаты к нужному мне виду? Вот обратный процесс вполне нормально работает - после ввода координат эллипсов в таблицу и нажатия кнопки - все эти кружочки сами распередляются по заданным координатам...
PVGDRK Дата 12.11.2010, 12:46
  Спасибо за подсказку :)
Пойду отчеты допишу и займусь своим окном
Алексей1153 Дата 12.11.2010, 12:11
 
Цитата(PVGDRK @ 12.11.2010, 13:19) *
Может окно window выводится?

Ну да :)

А тебе нужно в конструкторе Window создать объект RenderArea
Window::Window():...
{
     (new RenderArea(path,this))->setGeometry(...);//ну, или компоновщика задать. По вкусу
}
PVGDRK Дата 12.11.2010, 11:19
  Я так понимаю, что объект класса RenderArea у меня не создается а окно то выводится...
В main написано так:
Раскрывающийся текст

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window window;
window.show();
return a.exec();
}

Может окно window выводится?
Алексей1153 Дата 12.11.2010, 10:56
  где у тебя создаётся объект класса RenderArea и какой у него (объекта) родитель ?
PVGDRK Дата 12.11.2010, 10:10
  С вышеприведенным текстом у меня выводится одно окно почти на весь экран с нарисованной линией.... Поэтому я предполагаю, что нет у меня иерархии окон ... может и окна то нет? В смысле оно не описано как надо... Но я то его вижу... Ох, все- совсем запуталась
Алексей1153 Дата 11.11.2010, 20:27
  не понимаю вопрос - размеры какого окна хочешь задавать ? Какова иерархия окон и их взаимное расположение ?
PVGDRK Дата 11.11.2010, 15:13
  Вот спасибо то огромное!!! Нарисовалась линия :yahoo:
Уж простие, но мне бы как для самого круглого чайника, не могли бы пояснить с размером окна

void QWidget::resizeEvent ( QResizeEvent * event )
Куда это вписать ?

почему окно все равно выводится, если написано так:

файл window.h
Раскрывающийся текст

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QPainter>

class RenderArea;
class QWidget;

class Window : public QWidget
{
Q_OBJECT

public:
Window();

protected:
void paintEvent(QPaintEvent *);
};
#endif


файл window.c
Раскрывающийся текст

#include "window.h"
#include <QtGui>
#include <math.h>
#include "renderarea.h"

Window::Window()
{
}


файл renderarea.h

Раскрывающийся текст

#ifndef RENDERAREA_H
#define RENDERAREA_H
#include <QPainterPath>
#include <QWidget>

class RenderArea : public QWidget
{
Q_OBJECT

public:
RenderArea(const QPainterPath &path, QWidget *parent = 0);

private:
QPainterPath path;

};
#endif


файл renderarea.c
Раскрывающийся текст

#include <QtGui>
#include <QPainter>
#include "renderarea.h"
#include "window.h"

RenderArea::RenderArea(const QPainterPath &path, QWidget *parent)
: QWidget(parent), path(path)
{

}

void Window::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.drawLine(QPointF(10,10),QPointF(90,90));

}

Где тогда задаются размеры окна?
Алексей1153 Дата 11.11.2010, 14:11
  PVGDRK, тебе надо объявить в классе Window
/*virtual*/ void paintEvent(QPaintEvent *);


а затем реализовать

void Window::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.drawLine(QPoint(10,10),QPoint(90,90)); // Рисуем линию
}


а насчёт комбы - ну это ты сама решай, надо тебе его или нет ))
PVGDRK Дата 11.11.2010, 13:51
  похоже они у меня не связаны :(
Если в файл window.h изменить так:
Раскрывающийся текст

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QPainter>

class RenderArea;
class QComboBox;
class Window : public QWidget
{
Q_OBJECT

public:
Window();

private:
QComboBox *fillRuleComboBox;
};
#endif


А файл window.с изменить так:
Раскрывающийся текст

#include "window.h"
#include <QtGui>
#include <math.h>
#include "renderarea.h"

Window::Window()
{
fillRuleComboBox = new QComboBox;
fillRuleComboBox->addItem(tr("Odd Even"), Qt::OddEvenFill);
fillRuleComboBox->addItem(tr("Winding"), Qt::WindingFill);

QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(fillRuleComboBox, 1, 1, 1, 3);
setLayout(mainLayout);
}


То выводится маленькое окошко с комбобоксом,,,,
Как это все связать? Я уже запуталась
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 1:31