Здравствуйте, гость ( Вход | Регистрация )
PVGDRK | Дата 24.11.2010, 9:41 |
Я бы на вашем месте не мучился и использовал для этих целей графическую сцену. Смотреть в сторону QGraphicsView, QGraphicsScene, QGraphicsItem. При помощи этих компонент вашу задачу решить легче. Спасибо большое, за такой совет. Помучившись немного с QPainter - все таки сделала часть с помощью QGraphicsScene. Вот возник такой вопрос - у меня на объекте graphicsView выводятся эллипсы... Мне бы нужно внутри каждого эллипса разместить текст, причем так, чтобы при перемещении эллипса мышью текст перемещался вместе с ним... Я правильно понимаю, что нужно создать класс для эллипса а надпись в эллипсе будет объектом этого класса? и еще интересует вопрос с координатами на сцене... Есть ли методы, позволяющие, после перемещения объекта сцены считать , напрмер, по нажатию кнопки новые координаты объекта? Подскажите, пожалуйста, как это сделать... И еще интересует вопрос про точность задания координат эллипсов ... Может быть есть какие то методы, позволяющие перемещать объект мышью с определнным шагом? Эллипсы будут перемещаться с помощью мыши по двум осям X или Y... с шагом 0,5 ... мне придется анализировать в какой интервал попал эллипс и преобразовывать его координаты к нужному мне виду? Вот обратный процесс вполне нормально работает - после ввода координат эллипсов в таблицу и нажатия кнопки - все эти кружочки сами распередляются по заданным координатам... |
|
PVGDRK | Дата 12.11.2010, 12:46 |
Спасибо за подсказку Пойду отчеты допишу и займусь своим окном |
|
Алексей1153 | Дата 12.11.2010, 12:11 |
Может окно window выводится? Ну да А тебе нужно в конструкторе Window создать объект RenderArea
|
|
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 |
Вот спасибо то огромное!!! Нарисовалась линия Уж простие, но мне бы как для самого круглого чайника, не могли бы пояснить с размером окна 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
а затем реализовать
а насчёт комбы - ну это ты сама решай, надо тебе его или нет )) |
|
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); } То выводится маленькое окошко с комбобоксом,,,, Как это все связать? Я уже запуталась |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.4.2024, 8:39 |