Qyoto (Qt) を用いたボタン類のウィジェットを紹介します。Signal/Slot の使い方についてですが、参考文献 1 で紹介しているやり方ではコンパイルできなかったため、違うやり方をしています。この部分は改善の余地がありそうだということをご了承下さい。
まず、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
プッシュボタン
プッシュボタン QPushButton は Hello World! でも使ったウィジェットですが、再度紹介します。ボタンをマウスでクリックすると、イベント clicked() などが発生して、そのイベントに対応した処理をおこなうウィジェットです。
List: pushbutton.cs
using System;
using Qyoto;
/**
* ZetCode Qyoto C# tutorial
*
* This program creates a quit
* button. When we press the button,
* the application terminates.
*
* @author Jan Bodnar
* website zetcode.com
* last modified October 2012
*
* modified by Fuhito Suguri
* last modified 25-May-2014
*/
public class QyotoApp : QWidget
{
public QyotoApp ()
{
WindowTitle = "ボタン";
InitUI ();
Move (100, 100);
Show ();
}
public void InitUI ()
{
QPushButton but1 = new QPushButton ("ボタンA");
QPushButton but2 = new QPushButton ("ボタンB");
QPushButton but3 = new QPushButton ("ボタンC");
but1.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but2.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
but3.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
Connect (but1, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (but2, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (but3, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
QVBoxLayout vbox = new QVBoxLayout (this);
vbox.AddWidget (but1);
vbox.AddWidget (but2);
vbox.AddWidget (but3);
}
[Q_SLOT]
public void OnClicked ()
{
QPushButton b = (QPushButton)Sender ();
Console.WriteLine (Sender () + ":" + b.Text + "がクリックされました。");
}
[STAThread]
public static int Main (String[] args)
{
new QApplication (args);
new QyotoApp ();
return QApplication.Exec ();
}
}
コンパイルおよび実行例を以下に示します。
$ mcs pushbutton.cs -pkg:qyoto $ mono pushbutton.exe Qyoto.QPushButton:ボタンAがクリックされました。 Qyoto.QPushButton:ボタンBがクリックされました。 Qyoto.QPushButton:ボタンCがクリックされました。
チェックボックス
チェックボックス QCheckBox は、特定の項目のオンとオフ(二値)を切り替えるために用いられるウィジェットで、オンとオフの状態が保持されます。
List: checkbox.cs
using System;
using Qyoto;
/**
* ZetCode Qyoto C# tutorial
*
* This program creates a quit
* button. When we press the button,
* the application terminates.
*
* @author Jan Bodnar
* website zetcode.com
* last modified October 2012
*
* modified by Fuhito Suguri
* last modified 25-May-2014
*/
public class QyotoApp : QWidget
{
public QyotoApp ()
{
WindowTitle = "チェックボックス";
InitUI ();
Move (100, 100);
Show ();
}
public void InitUI ()
{
QCheckBox chk1 = new QCheckBox ("チェックボックスA");
QCheckBox chk2 = new QCheckBox ("チェックボックスB");
QCheckBox chk3 = new QCheckBox ("チェックボックスC");
chk1.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
chk2.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
chk3.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
Connect (chk1, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (chk2, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (chk3, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
QVBoxLayout vbox = new QVBoxLayout (this);
vbox.AddWidget (chk1);
vbox.AddWidget (chk2);
vbox.AddWidget (chk3);
}
[Q_SLOT]
public void OnClicked ()
{
string statusMsg;
QCheckBox c = (QCheckBox)Sender ();
if (c.Checked) {
statusMsg = "オン";
} else {
statusMsg = "オフ";
}
Console.WriteLine (Sender () + ":" + c.Text + "が" + statusMsg + "になりました。");
}
[STAThread]
public static int Main (String[] args)
{
new QApplication (args);
new QyotoApp ();
return QApplication.Exec ();
}
}
コンパイルおよび実行例を以下に示します。
$ mcs checkbox.cs -pkg:qyoto $ mono checkbox.exe Qyoto.QCheckBox:チェックボックスAがオンになりました。 Qyoto.QCheckBox:チェックボックスBがオンになりました。 Qyoto.QCheckBox:チェックボックスCがオンになりました。 Qyoto.QCheckBox:チェックボックスAがオフになりました。 Qyoto.QCheckBox:チェックボックスBがオフになりました。
ラジオボタン
ラジオボタン QRadioButton は、複数の項目の中から 1 つだけ選択させるために用いられるウィジェットです。Qt の場合、親ウィジェットが同じであれば複数のラジオボタンは同じグループとして扱われます。同じ親の下で、複数のラジオボタンを複数のグループで管理したい場合には、QButtonGroup でグループを区別します。以下の例ではラジオボタンA、B、Cと、ラジオボタンD、Eを別のグループとして扱っています。
List: radiobutton.cs
using System;
using Qyoto;
/**
* ZetCode Qyoto C# tutorial
*
* This program creates a quit
* button. When we press the button,
* the application terminates.
*
* @author Jan Bodnar
* website zetcode.com
* last modified October 2012
*
* modified by Fuhito Suguri
* last modified 25-May-2014
*/
public class QyotoApp : QWidget
{
public QyotoApp ()
{
WindowTitle = "ラジオボタン";
InitUI ();
Move (100, 100);
Show ();
}
public void InitUI ()
{
QButtonGroup g1 = new QButtonGroup ();
QButtonGroup g2 = new QButtonGroup ();
QRadioButton rb1 = new QRadioButton ("ラジオボタンA");
QRadioButton rb2 = new QRadioButton ("ラジオボタンB");
QRadioButton rb3 = new QRadioButton ("ラジオボタンC");
QRadioButton rb4 = new QRadioButton ("ラジオボタンD");
QRadioButton rb5 = new QRadioButton ("ラジオボタンE");
rb1.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
rb2.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
rb3.SetSizePolicy (QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
Connect (rb1, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (rb2, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (rb3, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (rb4, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
Connect (rb5, SIGNAL ("clicked()"), this, SLOT ("OnClicked()"));
g1.AddButton (rb1, 1);
g1.AddButton (rb2, 2);
g1.AddButton (rb3, 3);
g2.AddButton (rb4, 4);
g2.AddButton (rb5, 5);
QVBoxLayout vbox = new QVBoxLayout (this);
vbox.AddWidget (rb1);
vbox.AddWidget (rb2);
vbox.AddWidget (rb3);
vbox.AddWidget (rb4);
vbox.AddWidget (rb5);
}
[Q_SLOT]
public void OnClicked ()
{
QRadioButton r = (QRadioButton)Sender ();
Console.WriteLine (Sender () + ":" + r.Text + "がオンになりました。");
}
[STAThread]
public static int Main (String[] args)
{
new QApplication (args);
new QyotoApp ();
return QApplication.Exec ();
}
}
コンパイルおよび実行例を以下に示します。
$ mcs radiobutton.cs -pkg:qyoto $ mono radiobutton.exe Qyoto.QRadioButton:ラジオボタンAがオンになりました。 Qyoto.QRadioButton:ラジオボタンBがオンになりました。 Qyoto.QRadioButton:ラジオボタンCがオンになりました。 Qyoto.QRadioButton:ラジオボタンDがオンになりました。 Qyoto.QRadioButton:ラジオボタンEがオンになりました。
参考サイト
- C# Qyoto tutorial
- Qyoto: Main Page - Qyoto Documentation






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