Bir önceki yazımda Qt’den ve Qt ile nasıl proje açılacağından bahsetmiştim. Bu projeye başlamadan önce de okumanızda fayda var: http://bolubeyi.net/qt-giris-ve-qt-creatorda-proje-olusturma.html
Bu örneğimizde Youtube’da karşılaştığım bir uygulamayı yapacağız. Bir önceki yazımdaki gibi bir GUI projesi açıyoruz. GraphicView nesnesi üzerinde bir adet kare, bir adet daire oluşturuyoruz. Butonlar yardımı ile GraphicView nesnesini saat yönü ve tersi yönünde çeviriyoruz. Aynı zamanda kare ve dairenin renklerini ve hareket ettirilebilir özelliklerini de ayarlıyoruz. Öncelikle projeyi oluşturduğumuzda hazır olarak dialog.h, dialog.cpp, main.cpp ve dialog.ui sayfaları karşımıza geliyor. Burada dialog.h kütüphanemizde hazır olarak bazı kodlar geliyor:
#define DIALOG_H
#include
#include
#include
#include
namespace Ui {
class Dialog;}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked(); private:
Ui::Dialog *ui;
QGraphicsScene *scene;
QGraphicsEllipseItem *ellipse;
QGraphicsRectItem *rectangle;
};
#endif // DIALOG_H
Dialog.ui arayüzüne
, butonları sürükleyip bırakarak, butonların üzerine sağ tıklayıp “go to slot” seçiyoruz. Bu bizim “button click event” imiz oluyor ve Qt, “private slots” etiketinin altında otomatik olarak tanımlama yapıyor. Biz de nesneleri oluşturmak için “private” etiketinin altına kare ve elips nesnelerimizi tanımlıyoruz.
Dialog.cpp sayfamızda ise aşağıdaki kodlar yer alıyor. Burada kare ve daire nesnelerini oluşturarak, renk, pozisyon gibi verilerin ayarlamasını yaparak GraphicView nesnesine ekliyoruz. Bununla birlikte ItemIsMovable komutu ile, nesnelerin yerlerini sürükle bırak ile değiştirebiliyoruz. Butonların slotlarına git dediğimizde Qt, bu sayfada da bir fonksiyon oluşturuyor. Bu fonksiyonların altına rotate komutu ile döndürme işlemlerini yapıyoruz.
#include “ui_dialog.h”Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
scene =new QGraphicsScene(this);
ui->graphicsView->setScene(scene);QBrush redBrush(Qt::red);
QBrush blueBrush(Qt::blue);
QPen blackpen(Qt::black);
blackpen.setWidth(3);
ellipse = scene->addEllipse(10,10,100,100,blackpen,redBrush);
rectangle=scene->addRect(-100,-100,50,50,blackpen,blueBrush);
rectangle->setFlag(QGraphicsItem::ItemIsMovable);
rectangle->setFlag(QGraphicsItem::ItemIsMovable);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
ui->graphicsView->rotate(-1);
}
void Dialog::on_pushButton_2_clicked()
{
ui->graphicsView->rotate(+1);
}