{% raw %}

Qyoto 对话框

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

在 Qyoto C# 编程教程的这一部分中,我们将使用对话框。

对话框窗口或对话框是大多数现代 GUI 应用必不可少的部分。 对话被定义为两个或更多人之间的对话。 在计算机应用中,对话框是一个窗口,用于与应用“对话”。 对话框用于输入数据,修改数据,更改应用设置等。对话框是用户与计算机程序之间进行通信的重要手段。

MessageDialog

消息框是方便的对话框,可向应用的用户提供消息。 该消息由文本和图像数据组成。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * This program shows
  8. * QMessageBox dialogs
  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 = "Message boxes";
  19. InitUI();
  20. Resize(220, 90);
  21. Move(300, 300);
  22. Show();
  23. }
  24. void InitUI()
  25. {
  26. QGridLayout grid = new QGridLayout(this);
  27. grid.Spacing = 2;
  28. QPushButton error = new QPushButton("Error", this);
  29. QPushButton warni = new QPushButton("Warning", this);
  30. QPushButton quest = new QPushButton("Question", this);
  31. QPushButton infor = new QPushButton("Information", this);
  32. QPushButton about = new QPushButton("About", this);
  33. grid.AddWidget(error, 0, 0);
  34. grid.AddWidget(warni, 0, 1);
  35. grid.AddWidget(quest, 1, 0);
  36. grid.AddWidget(infor, 1, 1);
  37. grid.AddWidget(about, 2, 0);
  38. error.Clicked += ShowDialog;
  39. warni.Clicked += ShowDialog;
  40. quest.Clicked += ShowDialog;
  41. infor.Clicked += ShowDialog;
  42. about.Clicked += ShowDialog;
  43. }
  44. [Q_SLOT]
  45. void ShowDialog()
  46. {
  47. QPushButton btn = (QPushButton) Sender();
  48. if ("Error".Equals(btn.Text))
  49. {
  50. QMessageBox.Critical(this, "Error", "Error loading file!");
  51. } else if ("Warning".Equals(btn.Text))
  52. {
  53. QMessageBox.Warning(this, "Warning", "Operation not permitted!");
  54. } else if ("Question".Equals(btn.Text))
  55. {
  56. QMessageBox.Question(this, "Question", "Are you sure to quit?");
  57. } else if ("Information".Equals(btn.Text))
  58. {
  59. QMessageBox.Information(this, "Information", "Download completed.");
  60. } else if ("About".Equals(btn.Text))
  61. {
  62. QMessageBox.About(this, "About", "ZetCode Qyoto C# tutorial.");
  63. }
  64. }
  65. [STAThread]
  66. public static int Main(String[] args)
  67. {
  68. new QApplication(args);
  69. new QyotoApp();
  70. return QApplication.Exec();
  71. }
  72. }

我们使用GridLayout管理器来设置五个按钮的网格。 每个按钮显示一个不同的消息框。

  1. QPushButton button = (QPushButton) Sender();

在这里,我们确定哪个按钮称为ShowDialog()方法。

  1. if ("Error".Equals(btn.Text))
  2. {
  3. QMessageBox.Critical(this, "Error", "Error loading file!");
  4. }

如果按下错误按钮,则会显示错误对话框。 我们使用QMessageBox类的静态方法来显示消息框。

283.md - 图1

283.md - 图2

283.md - 图3

283.md - 图4

283.md - 图5

QInputDialog

QInputDialog类提供了一个简单的便捷对话框,可从用户那里获取单个值。 输入值可以是字符串,数字或列表中的。 必须设置标签以告知用户他们应该输入什么。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * This program shows an input
  8. * dialog.
  9. *
  10. * @author Jan Bodnar
  11. * website zetcode.com
  12. * last modified October 2012
  13. */
  14. public class QyotoApp : QWidget
  15. {
  16. QLineEdit edit;
  17. public QyotoApp()
  18. {
  19. WindowTitle = "QInputDialog";
  20. InitUI();
  21. Resize(300, 150);
  22. Move(300, 300);
  23. Show();
  24. }
  25. void InitUI()
  26. {
  27. QPushButton show = new QPushButton("Dialog", this);
  28. show.Clicked += ShowDialog;
  29. show.FocusPolicy = Qt.FocusPolicy.NoFocus;
  30. show.Move(20, 20);
  31. edit = new QLineEdit(this);
  32. edit.Move(130, 22);
  33. }
  34. [Q_SLOT]
  35. void ShowDialog()
  36. {
  37. String text = QInputDialog.GetText(
  38. this, "Input Dialog", "Enter your name");
  39. if (text!=null && text.Trim() != String.Empty)
  40. {
  41. edit.Text = text;
  42. }
  43. }
  44. [STAThread]
  45. public static int Main(String[] args)
  46. {
  47. new QApplication(args);
  48. new QyotoApp();
  49. return QApplication.Exec();
  50. }
  51. }

在代码示例中,我们有一个按钮和一行编辑。 该按钮显示一个输入对话框。 我们得到一些文本,文本显示在行编辑小部件中。

  1. String text = QInputDialog.GetText(
  2. this, "Input Dialog", "Enter your name");

GetText()静态方法创建输入对话框。 对话框中的文本存储在text变量中。

  1. if (text!=null && text.Trim() != String.Empty)
  2. {
  3. edit.Text = text;
  4. }

在更新行编辑之前,请确保text变量不为null且不为空,并且不仅由空格组成。

283.md - 图6

图:输入对话框

QColorDialog

QColorDialog类提供用于指定颜色的对话框小部件。 颜色对话框的功能是允许用户选择颜色。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * In this program, we use the
  8. * QColorDialog to change the colour
  9. * of a label text.
  10. *
  11. * @author Jan Bodnar
  12. * website zetcode.com
  13. * last modified October 2012
  14. */
  15. public class QyotoApp : QWidget
  16. {
  17. QLabel label;
  18. public QyotoApp() : base()
  19. {
  20. WindowTitle = "QColorDialog";
  21. InitUI();
  22. Resize(250, 200);
  23. Move(300, 300);
  24. Show();
  25. }
  26. void InitUI()
  27. {
  28. label = new QLabel("ZetCode Qyoto C# tutorial", this);
  29. QVBoxLayout vbox = new QVBoxLayout(this);
  30. label.Alignment = AlignmentFlag.AlignCenter;
  31. vbox.AddWidget(label);
  32. }
  33. protected override void OnMousePressEvent(QMouseEvent arg1)
  34. {
  35. QColor col = QColorDialog.GetColor();
  36. if (!col.IsValid()) return;
  37. String style = String.Format("QWidget {{ color: {0} }}", col.Name());
  38. label.StyleSheet = style;
  39. }
  40. [STAThread]
  41. public static int Main(String[] args)
  42. {
  43. new QApplication(args);
  44. new QyotoApp();
  45. return QApplication.Exec();
  46. }
  47. }

我们在窗口中心显示一些文本。 通过单击窗口区域,我们显示一个颜色对话框。 我们将文本前景色更改为从对话框中选择的颜色。

  1. protected override void OnMousePressEvent(QMouseEvent arg1)
  2. {
  3. ...
  4. }

为了接收我们窗口的鼠标按下事件,我们必须重写MousePressEvent()方法。

  1. QColor col = QColorDialog.GetColor();

正在创建QColorDialog。 所选颜色存储在col变量中。

  1. if (!color.IsValid()) return;

当按下取消按钮时,我们什么也不做。

  1. String style = String.Format("QWidget {{ color: {0} }}", color.Name());
  2. label.SetStyleSheet(style);

在这里,我们更新标签文本的前景色。

283.md - 图7

图:QColorDialog

QFontDialog

QFontDialog类提供用于选择字体的对话框小部件。

  1. using System;
  2. using QtCore;
  3. using QtGui;
  4. /**
  5. * ZetCode Qyoto C# tutorial
  6. *
  7. * In this program, we use the
  8. * QFontDialog to change the font
  9. * of a label text.
  10. *
  11. * @author Jan Bodnar
  12. * website zetcode.com
  13. * last modified October 2012
  14. */
  15. public class QyotoApp : QWidget
  16. {
  17. QLabel label;
  18. public QyotoApp() : base()
  19. {
  20. WindowTitle = "QFontDialog";
  21. InitUI();
  22. Resize(250, 200);
  23. Move(300, 300);
  24. Show();
  25. }
  26. void InitUI()
  27. {
  28. label = new QLabel("ZetCode Qyoto C# tutorial", this);
  29. QVBoxLayout vbox = new QVBoxLayout(this);
  30. label.Alignment = AlignmentFlag.AlignCenter;
  31. vbox.AddWidget(label);
  32. }
  33. protected override void OnMousePressEvent(QMouseEvent arg1)
  34. {
  35. bool ok = true;
  36. QFont font = QFontDialog.GetFont(ref ok);
  37. if (!ok) return;
  38. label.Font = font;
  39. }
  40. [STAThread]
  41. public static int Main(String[] args)
  42. {
  43. new QApplication(args);
  44. new QyotoApp();
  45. return QApplication.Exec();
  46. }
  47. }

此示例与上一个示例相似。 这次,我们更改文本的字体。

  1. QFont font = QFontDialog.GetFont(ref ok);

正在创建QFontDialog。 当我们按下对话框的 OK 按钮时,将设置boolean ok变量。

  1. if (!ok) return;

如果不按“确定”按钮,我们什么也不做。

  1. label.Font = font;

font字段存储所选字体。 我们将标签的字体更新为新选择的字体。

283.md - 图8

图:QFontDialog

在 Qyoto C# 教程的这一部分中,我们使用了对话框窗口。

{% endraw %}