среда, 29 января 2014 г.

Цикл по GraphicsView(1). Создание сцены, view. Размещение стандартных элементов. Работа с элементами.

Приветствую. 
Речь пойдёт о таком интересном и мало описанном элементе Qt как QGraphicsView. 
Статьи будут писаться по мере нахождения у меня времени и продвижения программы, на примере которой я и собираюсь показать как надо использовать QGraphicsView. 
1) Создание сцены, view. Размещение стандартных элементов. Работа с элементами. 
2) Создание собственного элемента. Работа с собственным элементом. Создание редактора свойств. 
3) Взаимодействие элементов. Создание связи между двумя элементами. 
4) ?. 

Итак начнём. 

1) Создание сцены, view. Размещение стандартных элементов. Работа с элементами.

Создание сцены, view. Размещение стандартных элементов.
Работа с элементами.
Чтобы начать работать нам необходимы три компонента.
QGraphicsScene - scene или модель, которая хранит данные и работает с ними. 
QGraphicsView - view или элемент интерфейса, отображающий данные модели. Он является графическим компонентов и именно с ним работает пользователь.
QGraphics*Item - стандартные компоненты, которые могут быть помещены в scene и отображены view.
Для начала создаём проект Qt. Назовём его Graphics-lesson_1.

Переходим в graphics-lesson_1.h файл.
Добавляем инклуды:

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsLineItem>

Добавляем приватные поля нашему классу:

QGraphicsLineItem * lineItem_;
QGraphicsScene * scene_;
QGraphicsView * view_;

Так же добавляем приватный метод 

void initUI();

Переходим в graphics-lesson_1.cpp файл.
В конструктор класса добавляем строку 

initUi(); 

Пишем реализацию метода

void Graphics_lesson_1::initUI()
{
// создаём scene
scene_ = new QGraphicsScene;
// создаём view, делаем его центральным виджетом и устанавливаем сцену
view_ = new QGraphicsView();
setCentralWidget(view_);
view_->setScene(scene_);
// создаём объект линии и добавляем его в сцену.
lineItem_ = new QGraphicsLineItem(0,0, 250,250);
scene_->addItem(lineItem_);
}

Компилируем. Запускаем. Видим линию на белом фоне и ничего мы поделать с ней не можем.
Потому добавляем в метод iniUi в конец следующий строки

// разрешаем передвигать и выделять линию.
lineItem_->setFlag(QGraphicsItem::ItemIsMovable, true);
lineItem_->setFlag(QGraphicsItem::ItemIsSelectable, true);

Компилируем. Запускам. Теперь мы можем выделять и передвигать наш объект. Работа с другими стандартными объектами не отличается. Спасибо за внимание.

Архив 

Код 

graphics_lesson_1.cpp


#include "graphics_lesson_1.h"
Graphics_lesson_1::Graphics_lesson_1(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
initUI();
}
Graphics_lesson_1::~Graphics_lesson_1()
{
}
void Graphics_lesson_1::initUI()
{
// создаём scene
scene_ = new QGraphicsScene;
// создаём view, делаем его центральным виджетом и устанавливаем сцену
view_ = new QGraphicsView();
setCentralWidget(view_);
view_->setScene(scene_);
// создаём объект линии и добавляем его в сцену.
lineItem_ = new QGraphicsLineItem(0,0, 250,250);
scene_->addItem(lineItem_);
// разрешаем передвигать и выделять линию.
lineItem_->setFlag(QGraphicsItem::ItemIsMovable, true);
lineItem_->setFlag(QGraphicsItem::ItemIsSelectable, true);
}


graphics_lesson_1.h

#ifndef GRAPHICS_LESSON_1_H
#define GRAPHICS_LESSON_1_H
#include <QtGui/QMainWindow>
#include "ui_graphics_lesson_1.h"
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include <QPushButton>
class Graphics_lesson_1 : public QMainWindow
{
Q_OBJECT
public:
Graphics_lesson_1(QWidget *parent = 0, Qt::WFlags flags = 0);
~Graphics_lesson_1();
private:
Ui::Graphics_lesson_1Class ui;
QGraphicsLineItem * lineItem_;
QGraphicsScene * scene_;
QGraphicsView * view_;
private:
void initUI();
};
#endif // GRAPHICS_LESSON_1_H
main.cpp
#include "graphics_lesson_1.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Graphics_lesson_1 w;
w.show();
return a.exec();
}

суббота, 11 января 2014 г.


Стайлшит для отбрасывания "снега" текстом. Выглядит отлично
Выделите и посмотрите на эффект.

СНЕГ

СНЕГ

СНЕГ


left: 28px;
width:100px;
text-align:center;
top:49px;
z-index: 5;
text-shadow: -2px -2px 2px white, -2px 2px 2px white, 2px 2px 2px white, 2px -2px 2px white;
color:#222;
font-size:30px;
font-weight:normal;