原文: http://zetcode.com/gui/csharpqyoto/introduction/

在 Qyoto C# 编程教程的这一部分中,我们将介绍并构建 Qyoto 库。 我们使用 C# 编程语言创建第一个 Qyoto 程序。

本教程的目的是帮助您开始使用 Qyoto 和 C# 。 可以在此处下载本教程中使用的图像。 我使用了 Gnome 项目的探戈图标包中的一些图标。 该教程是在 Qyoto 项目的维护者 Dimitar Dobrev 的帮助下创建的。

关于

Qyoto 是一个库,它提供 Qt 库与.NET 语言(如 C# 或 Visual Basic)的绑定。 Qt 是功能强大的跨平台应用开发框架。 它的母语是 C++ 。 Qyoto 是 KDE 桌面环境的一部分。 Qyoto 是使用SMOKE库创建的。 这是一个 KDE 项目,用于创建多种语言的绑定。 SMOKE 代表脚本元对象 Kompiler 引擎。

在 Linux 上构建 Qyoto

我们从最新资源构建 Qyoto 库。

  1. $ git clone git://anongit.kde.org/smokegen
  2. $ git clone git://anongit.kde.org/smokeqt
  3. $ git clone git://anongit.kde.org/assemblygen

我们从 git 仓库下载源代码。

  1. $ sudo apt-get install cmake-qt-gui

如果不存在,请安装cmake-qt-gui

我们按以下顺序构建三个包:1)smokegen,2)smokeqt 和 3)assemblygen。 我们在三个目录中的每个目录中运行cmake-qt-gui。 我们指定源,构建目录,并将CMAKE_BUILD_TYPE设置为Release。 我们单击配置和生成按钮。 将目录更改为构建目录。 运行makesudo make install

  1. $ export LD_LIBRARY_PATH=/usr/local/qt4/lib

在构建smokeqt包之前,我们设置一个环境变量。 每次构建后,我们运行sudo ldconfig命令。

  1. $ ls /usr/local/lib/mono/qyoto
  2. qyoto-qtcore.dll qyoto-qtsvg.dll
  3. qtscript.dll qyoto-qtgui.dll qyoto-qtuitools.dll
  4. qttest.dll qyoto-qtnetwork.dll qyoto-qtwebkit.dll
  5. qtuitools.dll qyoto-qtopengl.dll qyoto-qtxml.dll
  6. qtwebkit.dll qyoto-qtscript.dll qyoto-qtxmlpatterns.dll
  7. qyoto-phonon.dll qyoto-qtsql.dll

我们在/usr/local/lib/mono/qyoto目录中有 Qyoto dll。

  1. $ dmcs -r:/usr/local/lib/mono/qyoto/qyoto-qtcore.dll \
  2. > -r:/usr/local/lib/mono/qyoto/qyoto-qtgui.dll donut.cs

上面的命令显示了如何编译甜甜圈示例。 mono C# 编译器的-r参数加载 Qt 程序集。 这是一个动态库。 该命令显示 Linux 系统上 dll 库的路径。

创建工具提示

第一个示例将显示一个工具提示。 工具提示是一个小的矩形窗口,它提供有关对象的简短信息。 它通常是一个 GUI 组件。 它是应用帮助系统的一部分。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * This program displays a
  8. * tooltip.
  9. *
  10. * @author Jan Bodnar
  11. * website zetcode.com
  12. * last modified October 2012
  13. */
  14. public class QyotoApp : QWidget
  15. {
  16. public QyotoApp()
  17. {
  18. WindowTitle = "Tooltip";
  19. ToolTip = "This is QWidget";
  20. Resize(250, 150);
  21. Move(300, 300);
  22. Show();
  23. }
  24. [STAThread]
  25. public static int Main(String[] args)
  26. {
  27. new QApplication(args);
  28. new QyotoApp();
  29. return QApplication.Exec();
  30. }
  31. }

该示例创建一个窗口。 如果将鼠标指针悬停在窗口区域上方,则会弹出一个工具提示。

  1. using System;
  2. using QtCore;
  3. using QtGui;

using关键字导入我们将在应用中使用的必需品类型。

  1. public class QyotoApp : QWidget {

该示例继承自QWidget。 QWidget 类是所有用户界面对象的基类。 小部件是用户界面的原子。 它从窗口系统接收鼠标,键盘和其他事件。

  1. WindowTitle = "Tooltip";

设置WindowType属性将显示窗口的标题。

  1. ToolTip = "This is QWidget";

我们通过ToolTip属性设置工具提示。

  1. Resize(250, 150);

在这里,我们设置窗口的宽度和高度。

  1. Move(300, 300);

Move()方法在屏幕上移动窗口。

  1. Show();

一切准备就绪后,我们在屏幕上显示窗口。

  1. [STAThread]
  2. public static int Main(String[] args)

Windows 平台上需要[STAThread]属性。 确保与 COM 组件的通信是安全的。 在某些情况下,例如剪贴板和文件对话框,我们正在调用 COM 组件。 没有此属性,应用将崩溃。

  1. new QApplication(args);
  2. new QyotoApp();
  3. return QApplication.Exec();

这三行设置了应用。

Qyoto 介绍 - 图1

图:工具提示

使窗口居中

在第二个示例中,我们将窗口置于屏幕中央。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * This program centers a window
  8. * on the screen.
  9. *
  10. * @author Jan Bodnar
  11. * website zetcode.com
  12. * last modified October 2012
  13. */
  14. public class QyotoApp : QWidget
  15. {
  16. const int WIDTH = 250;
  17. const int HEIGHT = 150;
  18. public QyotoApp()
  19. {
  20. WindowTitle = "Center";
  21. Resize(WIDTH, HEIGHT);
  22. Center();
  23. Show();
  24. }
  25. private void Center()
  26. {
  27. QDesktopWidget qdw = new QDesktopWidget();
  28. int screenWidth = qdw.Width;
  29. int screenHeight = qdw.Height;
  30. int cx = (screenWidth - WIDTH) / 2;
  31. int cy = (screenHeight - HEIGHT) / 2;
  32. Move(cx, cy);
  33. }
  34. [STAThread]
  35. public static int Main(String[] args)
  36. {
  37. new QApplication(args);
  38. new QyotoApp();
  39. return QApplication.Exec();
  40. }
  41. }

Qyoto 没有使窗口居中的单一方法。

  1. const int WIDTH = 250;
  2. const int HEIGHT = 150;

这两个常数定义了应用窗口的宽度和高度。

  1. Center();

使窗口居中的代码位于Center()方法中。

  1. QDesktopWidget qdw = new QDesktopWidget();

QDesktopWidget类提供有关屏幕的信息。

  1. int screenWidth = qdw.Width();
  2. int screenHeight = qdw.Height();

在这里,我们确定屏幕的宽度和高度。

  1. int cx = (screenWidth - WIDTH) / 2;
  2. int cy = (screenHeight - HEIGHT) / 2;

在这里,我们计算居中窗口的 x,y 坐标。 为了使窗口在屏幕上居中,我们需要知道屏幕的大小和窗口的大小。

  1. Move(cx, cy);

我们将窗口移至计算出的cxcy坐标。

退出按钮

在本节的最后一个示例中,我们将创建一个退出按钮。 当我们按下此按钮时,应用终止。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * This program creates a quit
  8. * button. When we press the button,
  9. * the application terminates.
  10. *
  11. * @author Jan Bodnar
  12. * website zetcode.com
  13. * last modified October 2012
  14. */
  15. public class QyotoApp : QWidget
  16. {
  17. public QyotoApp()
  18. {
  19. WindowTitle = "Quit button";
  20. InitUI();
  21. Resize(250, 150);
  22. Move(300, 300);
  23. Show();
  24. }
  25. public void InitUI()
  26. {
  27. QPushButton quit = new QPushButton("Quit", this);
  28. Connect(quit, SIGNAL("clicked()"), qApp, SLOT("quit()"));
  29. quit.SetGeometry(50, 40, 80, 30);
  30. }
  31. [STAThread]
  32. public static int Main(String[] args)
  33. {
  34. new QApplication(args);
  35. new QyotoApp();
  36. return QApplication.Exec();
  37. }
  38. }

我们使用QPushButton。 它是矩形的,通常显示一个文本标签。

  1. InitUI();

我们将用户界面的创建委托给InitUI()方法。

  1. QPushButton quit = new QPushButton("Quit", this);

我们创建按钮小部件。 构造器的第一个参数是标签,按钮将显示该标签。 第二个参数是按钮的父窗口小部件。

  1. Connect(quit, SIGNAL("clicked()"), qApp, SLOT("quit()"));

当我们点击按钮时,会发出clicked()信号。 Connect()方法将信号连接到对象的特定槽。 该方法的第一个参数是接收信号的对象。 在我们的例子中,它是应用对象。 第二个参数是方法,称为。 在我们的情况下,它是应用对象的quit()方法。 qApp是对应用对象的全局引用。

  1. quit.SetGeometry(50, 40, 80, 30);

我们定位和调整按钮小部件的大小。 前两个参数是按钮的 x,y 坐标。 最后两个参数是按钮的宽度和高度。

Qyoto 介绍 - 图2

图:退出按钮

本节介绍了使用 C# 语言编写的 Qyoto 库。