Qyoto (Qt) でウィジェットを配置するには、Hello Wold! で紹介したサンプルのように絶対座標を指定する方法の他に、レイアウトマネージャを使う方法があります。レイアウトには「ボックスレイアウト」「グリッドレイアウト」「フォームレイアウト」そして「スタックトレイアウト」の四種類がありますが、その内最初の 2 つを使ってウィジェットを配置するサンプルを紹介します。
ここでは二種類のサンプルを紹介しますが、どちらもベタなコーディングで申し訳ありません(もう少し繰り返しを無くしたすっきりしたコーディングにしたいのですが、できていません)。
Fedora 20 における Mono / Qyoto の開発環境の主要なパッケージは、前回と同じく以下の通りです。
- mono-core-3.4.0-2.fc20.x86_64
- qt-4.8.6-5.fc20.x86_64
- qyoto-4.12.5-1.fc20.x86_64
- qyoto-devel-4.12.5-1.fc20.x86_64
ボックスレイアウト
縦方向 (QVBoxLayout) あるいは横方向 (QHBoxLayout) にウィジェットを配置するレイアウトマネージャです。レイアウトマネージャを組み合わせて、縦横にウィジェットを配置することができます。
参考サイト 1. に掲載されているサンプルをベースにしたボックスレイアウトのサンプルを示します。
List: boxlayout.cs
using System;
using Qyoto;
/**
* ZetCode Qyoto C# tutorial
*
* In this program, use box layouts
* to position two buttons in the
* bottom right corner of the window.
*
* @author Jan Bodnar
* website zetcode.com
* last modified October 2012
*
* modified by Fuhito Suguri
* last modified 14-May-2014
*/
public class QyotoApp : QWidget
{
public QyotoApp()
{
WindowTitle = "BoxLayout";
InitUI();
Move(300, 300);
Show();
}
void InitUI()
{
QPushButton but_1 = new QPushButton("1", this);
QPushButton but_2 = new QPushButton("2", this);
QPushButton but_3 = new QPushButton("3", this);
QPushButton but_4 = new QPushButton("4", this);
QPushButton but_5 = new QPushButton("5", this);
but_1.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_2.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_3.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_4.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_5.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
QVBoxLayout vbox = new QVBoxLayout(this);
QHBoxLayout hbox1 = new QHBoxLayout();
QHBoxLayout hbox2 = new QHBoxLayout();
hbox1.AddWidget(but_1);
hbox1.AddWidget(but_2);
hbox1.AddWidget(but_3);
hbox2.AddWidget(but_4);
hbox2.AddWidget(but_5);
vbox.AddLayout(hbox1);
vbox.AddLayout(hbox2);
}
[STAThread]
public static int Main(String[] args)
{
new QApplication(args);
new QyotoApp();
return QApplication.Exec();
}
}
コンパイルおよび実行例を以下に示します。
$ mcs boxlayout.cs -pkg:qyoto $ mono boxlayout.exe
グリッドレイアウト
QGridLayout は、格子状にウィジェットを配置するレイアウトマネージャです。
次に、同じく参考サイト 1. に掲載されているサンプルをベースにした QGridLayout のサンプルを示します。
List: gridlayout.cs
using System;
using Qyoto;
/**
* ZetCode Qyoto C# tutorial
*
* In this program, use the QGridLayout manager
* to create a New Folder example.
*
* @author Jan Bodnar
* website zetcode.com
* last modified October 2012
*
* modified by Fuhito Suguri
* last modified 14-May-2014
*/
public class QyotoApp : QWidget
{
public QyotoApp()
{
WindowTitle = "GridLayout";
InitUI();
Move(300, 300);
Show();
}
void InitUI()
{
QGridLayout grid = new QGridLayout(this);
QPushButton but_1 = new QPushButton("1", this);
QPushButton but_2 = new QPushButton("2", this);
QPushButton but_3 = new QPushButton("3", this);
QPushButton but_4 = new QPushButton("4", this);
QPushButton but_5 = new QPushButton("5", this);
but_1.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_2.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_3.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_4.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but_5.SetSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
grid.AddWidget(but_1, 0, 0);
grid.AddWidget(but_2, 0, 1);
grid.AddWidget(but_3, 0, 2);
grid.AddWidget(but_4, 1, 0);
grid.AddWidget(but_5, 1, 1, 1, 2);
}
[STAThread]
public static int Main(String[] args)
{
new QApplication(args);
new QyotoApp();
return QApplication.Exec();
}
}
コンパイルおよび実行例を以下に示します。
$ mcs gridlayout.cs -pkg:qyoto $ mono gridlayout.exe
参考サイト
- C# Qyoto tutorial
- Qyoto: Main Page - Qyoto Documentation





0 件のコメント:
コメントを投稿