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 件のコメント:
コメントを投稿