crossplatform.ru

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

PVGDRK
  опции профиля:
сообщение 2.11.2010, 11:58
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не могу понять с чего начать....
QT интегрирована в VisualStudio ,,, Выбираю QT Application
появляется форма ,,, как на ней что нибудь нарисовать? Круг напрмер или точку?
Во вкладке Project есть Add QtModule выбираю там OpenGL Library и ничего не добавляется
может я не так все поняла?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V   1 2 3 >  
Начать новую тему
Ответов (1 - 24)
igor_bogomolov
  опции профиля:
сообщение 2.11.2010, 12:20
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


почитайте для начала вот это
http://doc.crossplatform.ru/qt/4.6.x/qt4-arthur.html
и посмотрите примеры из стандартной поставки Qt
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 8.11.2010, 11:04
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Буду признательна, если все же поможете понять полному чайнику что и где писать,,,,
Посмотрела примеры из стандартной поставки Qt создала новый проект в VisualStudio -> Qt Console Application
Скопировала полностью код из примера,,, все скомпилировалось но при запуске ругается, что не может создать виджет...
Может нужно какой то другой проет выбрать не консольный?
Мне в конечном итоге нужно изобразить точки, которые можно было бы перемещать мышью и считывать их координаты либо наоборот вводить в какую нибудь таблицу координаты этих точек, а они бы сами распределялись
Помогите пожалуйста
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 8.11.2010, 11:11
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


PVGDRK, но тебе же не консольное приложение нужно.

А насчёт точек - нужно каждую точку описывать в программе как объект, помнить свойства этого объекта (координаты, цвет и тд)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 8.11.2010, 12:05
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ткните мне,пожалуйста, какое мне нужно приложение:

QT Application
QT Console Application не подходит
ActiveQTServer
QT4Desiner Plagin
QT Library

Я все таки предполагаю,что первое, правильно?
При создании проекта автоматически создается форма ,,,, не знаю как правильно сказать
эта форма описывается классом унаследованным от класса QMainWindow
С ней нужно что нибудь делать или так оставить как есть?
Потом создать новый класс моей точки наследовать его от классов QPaintDevice и QPaintEngine?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 8.11.2010, 12:44
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


PVGDRK, я в креаторе пишу на Qt, как оно выглядит в студии -не знаю. Наверное, QT Application
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 8.11.2010, 12:52
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(PVGDRK @ 8.11.2010, 11:04) *
Мне в конечном итоге нужно изобразить точки, которые можно было бы перемещать мышью и считывать их координаты либо наоборот вводить в какую нибудь таблицу координаты этих точек, а они бы сами распределялись
Я бы на вашем месте не мучился и использовал для этих целей графическую сцену. Смотреть в сторону QGraphicsView, QGraphicsScene, QGraphicsItem. При помощи этих компонент вашу задачу решить легче.

Цитата(PVGDRK @ 8.11.2010, 12:05) *
При создании проекта автоматически создается форма ,,,, не знаю как правильно сказать
эта форма описывается классом унаследованным от класса QMainWindow
С ней нужно что нибудь делать или так оставить как есть?
Это уже вам решать. Как вам проще создавать графический интерфейс в коде или при помощи qtdesigner. Мне больше нравится второй способ (хотя новичкам его обычно не рекомендуюn, и предлагают делать в коде, для более детального изучения qt)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 8.11.2010, 13:35
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо за ответы :) Становится немного понятнее ....
А QT Desiner это самостоятельная среда разработки? Я уже всю студию перерыла так и не смогла найти этот Disiner.... QT у меня версия 4.3.1 - может его там нету?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.11.2010, 14:10
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(PVGDRK @ 8.11.2010, 16:35) *
А QT Desiner это самостоятельная среда разработки?
нет, это визуальный редактор пользовательского (графического, визуального) интерфейса

Цитата(PVGDRK @ 8.11.2010, 16:35) *
Я уже всю студию перерыла так и не смогла найти этот Disiner.... QT у меня версия 4.3.1 - может его там нету?
в комплекте с Qt он точно есть, смотри кнопку "Пуск" -> "Qt ..."
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 11.11.2010, 12:03
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Помогите пожалуйста понять почему не выводится рисунок? Хочу нарисовать прямую линию...
и еще почему то никак не поменять размер окна - может еще чего то где то нужно дописать?
В QT примере при изменении значений размер окна меняется, а у меня нет
Если полностью скопировать QT пример в проект - то все работает, а я хочу понять что где и для чего пишется. Уже весь код примера перерыла но так и не поняла почему у меня ничего не выводится...

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

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QPainter>

class RenderArea;
class Window : public QWidget
{
Q_OBJECT

public:
Window();

};
#endif


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

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

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


файл 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);

QSize minimumSizeHint() const;
QSize sizeHint() const;
protected:
void paintEvent(QPaintEvent *event);

private:
QPainterPath path;
};
#endif


файл renderarea.c

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

#include <QtGui>

#include "renderarea.h"

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

QSize RenderArea::minimumSizeHint() const
{
return QSize(50, 50);
}

QSize RenderArea::sizeHint() const
{
return QSize(100, 100); // Почему если поменять значения - размер окна не изменяется?
}
void RenderArea::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.scale(width() / 100.0, height() / 100.0);
painter.translate(50.0, 50.0);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.11.2010, 12:21
Сообщение #11


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(PVGDRK @ 11.11.2010, 14:03) *
Window::Window()
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.drawLine(QPointF(10,10),QPointF(90,90)); // Рисуем линию
}

зачем это в конструкторе ? Убирай оттуда это :) И размещай в paintEvent

Чтобы реагировать на изменение размера, переопредели виртуалку
void QWidget::resizeEvent ( QResizeEvent * event )

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 11.11.2010, 12:39
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


В paintEvent тоже размещала - все равно не выводится линия
может чего забыла где приписать, инклюд какой нибудь или еще чего нибудь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.11.2010, 12:51
Сообщение #13


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


и вот так не рисуется ?
void RenderArea::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawLine(QPoint(10,10),QPoint(90,90)); // Рисуем линию
}





а окно то вообще на экране отображено ? Может оно невидимо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 11.11.2010, 13:25
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да, окно есть , но на нем ничего не рисуется :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 11.11.2010, 13:28
Сообщение #15


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


я не вижу как у вас связаны RenderArea и Window?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 11.11.2010, 13:51
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


похоже они у меня не связаны :(
Если в файл 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);
}


То выводится маленькое окошко с комбобоксом,,,,
Как это все связать? Я уже запуталась
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.11.2010, 14:11
Сообщение #17


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


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, 15:13
Сообщение #18


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот спасибо то огромное!!! Нарисовалась линия :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, 20:27
Сообщение #19


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


не понимаю вопрос - размеры какого окна хочешь задавать ? Какова иерархия окон и их взаимное расположение ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 12.11.2010, 10:10
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


С вышеприведенным текстом у меня выводится одно окно почти на весь экран с нарисованной линией.... Поэтому я предполагаю, что нет у меня иерархии окон ... может и окна то нет? В смысле оно не описано как надо... Но я то его вижу... Ох, все- совсем запуталась
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.11.2010, 10:56
Сообщение #21


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


где у тебя создаётся объект класса RenderArea и какой у него (объекта) родитель ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 12.11.2010, 11:19
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я так понимаю, что объект класса RenderArea у меня не создается а окно то выводится...
В main написано так:
Раскрывающийся текст

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

Может окно window выводится?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.11.2010, 12:11
Сообщение #23


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(PVGDRK @ 12.11.2010, 13:19) *
Может окно window выводится?

Ну да :)

А тебе нужно в конструкторе Window создать объект RenderArea
Window::Window():...
{
     (new RenderArea(path,this))->setGeometry(...);//ну, или компоновщика задать. По вкусу
}


Сообщение отредактировал Алексей1153 - 12.11.2010, 13:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 12.11.2010, 12:46
Сообщение #24


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо за подсказку :)
Пойду отчеты допишу и займусь своим окном
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 24.11.2010, 9:41
Сообщение #25


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Спасибо большое, за такой совет. Помучившись немного с QPainter - все таки сделала часть с помощью QGraphicsScene.
Вот возник такой вопрос - у меня на объекте graphicsView выводятся эллипсы... Мне бы нужно внутри каждого эллипса разместить текст, причем так, чтобы при перемещении эллипса мышью текст перемещался вместе с ним... Я правильно понимаю, что нужно создать класс для эллипса а надпись в эллипсе будет объектом этого класса?
и еще интересует вопрос с координатами на сцене... Есть ли методы, позволяющие, после перемещения объекта сцены считать , напрмер, по нажатию кнопки новые координаты объекта? Подскажите, пожалуйста, как это сделать... И еще интересует вопрос про точность задания координат эллипсов ... Может быть есть какие то методы, позволяющие перемещать объект мышью с определнным шагом? Эллипсы будут перемещаться с помощью мыши по двум осям X или Y... с шагом 0,5 ... мне придется анализировать в какой интервал попал эллипс и преобразовывать его координаты к нужному мне виду? Вот обратный процесс вполне нормально работает - после ввода координат эллипсов в таблицу и нажатия кнопки - все эти кружочки сами распередляются по заданным координатам...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 30.5.2025, 6:59