Qt/Gcc


1.スクロールウィンドウ
 1-1 基本ウィンドウのプロジェクトを作成

  1-1-1 プロジェクトの新規作成を選んで、Qtウィジェットプロジェクト−Qt GUIアプリケーションを選んで「選択」を押す。

   fig 1 新規作成

 1-1-2 プロジェクト名とパスを設定する。今回はImageViewというプロジェクトを作るターゲット設定はそのまま(図は省略)
 1-1-3  クラス情報は、以下のようにQMainWindowを基底クラスにして生成(fig2)

       fig 2 クラス情報
 
 1-1-4 以下のプロジェクト管理でプロジェクト生成完了
 

   fig 3 プロジェクト管理

 1-1-5 以下の画面が表示される

   fig 4 ソースファイルの生成

1-2 viewとsceneの追加
今回は以下のViewとSceneをもったウィンドウを作成する。
QtのViewとSceneの関係は、私が理解したかぎりでは、Sceneというセロファン用紙に描画して、
そのセルファン用紙をViewという紙(大きさは色々)に張り付ける、というイメージです。
自分しか分からないイメージです。そして、Windowという枠(枠の中は固い木の板なので動かない。つまりスクロールしない)にはめ込むというイメージ。ただ、Windowは、白い木の板がはってはるので、木の板に描画することは可能。
 
    fig 5 スクロール(viewとscene)を持ったwindow

 1-2-1ViewとSceneをクラスとして定義するために、クラスを生成します。具体的には「.cpp」と「.h」ファイルを作ります。
    プロジェクトの新規作成を選んで、ファイルとクラスで「C++」−「C++クラス」を選んで「選択」を押す。

  fig 6 クラスファイルの生成

 1-2-2 ViewC++クラスウィザードで「クラス名」を「View」、基底クラスを「QGraphicsView」と入力、型情報を
           「QWidgetを「継承」を選ぶ。パスはファイルを追加したいパス。今回は先ほど作った、ImageView
           プロジェクトのフォルダとする。

 fig 7 viewクラスの生成

 1-2-3 先ほどのViewクラスと同じように、C++クラスウィザードで「クラス名」を「Scene」、基底クラスを「QGraphicsScene」と入力、型情報を
           「QObjectを継承」を選ぶ。パスはファイルを追加したいパス。今回は先ほど作った、ImageViewプロジェクトのフォルダとする。

  fig 8 sceneクラスの生成

 1-2-4 下記のように、プロジェクトにview.h,view.cpp,scene.h,scene.cppが追加された。

   fig 9
1-2-5 ViewとSceneをwindowに登録するための作業を実施します。
 
 Mainwindow.hのインプリメント
以下のようにmainwindow.hにクラス宣言をする。

//add class
class Scene;
class View;
//////////////

これらのクラスをmainwindowのメンバ変数として宣言する。
//add menber item
private:
    Scene *m_scene;
    View *m_view;

mainwindow.hファイルリンク

1-2-6 mainwindow.cppのインプリメント
mainwindow.cppのコンストラクタに以下の行を追加します。
コンストラクタ「MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)」

    //add view,scene
    m_scene = new Scene;     //  シーン矩形部分
    m_scene->setSceneRect(0,0,640,480);//set view size ,
                   //マイナス座標も設定可m_scene->setSceneRect(-320,-240,640,480);
    m_view = new View;//viewの生成
    m_view->setScene(m_scene);//viewにsceneをセット
    setCentralWidget(m_view);//viewをwindowのセントラルウィジェットとして設定

ヘッダファイルとして以下のファイル名を宣言します。
 //add include files
  #include <QtGui>
  #include "scene.h"//QGraphicsSceneクラスを基底オブジェクトとして生成する。
  #include"view.h"//QGraphicsViewクラスを基底オブジェクトとして生成する。
 ///

ここまでのインプリメントで、最初に表示されたスクロールバーがついたウィンドウが表示される。

1-3 Windowサイズの変更
このままだとウィンドウが小さいので、ウィンドウを表示するときの表示(出現)位置と大きさを変更する。
以下のコードを先ほどのMainWindowクラスのコンストラクタに以下のコードを追加する。

    this->setGeometry(100,100,640,480);//this function set Window sizes.it is the QWidget class menber

mainwindow.cpp cppファイルリンク

以下結果です。

 fig 10 ウィンドウサイズの変更

ソースコード
 ソースファイル(Prjectファイル以外)


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

//add class
class Scene;
class View;
//////////////

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
   
private:
    Ui::MainWindow *ui;
//add menber item
private:
    Scene *m_scene;
    View *m_view;
};

#endif // MAINWINDOW_H
 
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
//add include files
#include <QtGui>
#include "scene.h"//QGraphicsSceneクラスを基底オブジェクトとして生成する。
#include"view.h"//QGraphicsViewクラスを基底オブジェクトとして生成する。
///

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setGeometry(100,100,640,480);//this function set Window sizes.it is the QWidget class menber
    //add view,scene
    m_scene = new Scene;     //  シーン矩形部分
    m_scene->setSceneRect(0,0,640,480);//set view size ,マイナス座標も設定可m_scene->setSceneRect(-320,-240,640,480);
    m_view = new View;//viewの生成
    m_view->setScene(m_scene);//viewにsceneをセット
    setCentralWidget(m_view);//viewをwindowのセントラルウィジェットとして設定
}

MainWindow::~MainWindow()
{
    delete ui;
}


トップページに戻る