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;
}