{% raw %}

Qyoto 对话框

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

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

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

MessageDialog

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

  1. ' ZetCode Mono Visual Basic Qt tutorial
  2. '
  3. ' This program shows
  4. ' QMessageBox dialogs
  5. '
  6. ' author jan bodnar
  7. ' last modified May 2009
  8. ' website www.zetcode.com
  9. Imports Qyoto
  10. Public Class VBQApp
  11. Inherits QWidget
  12. Public Sub New()
  13. Me.SetWindowTitle("Message boxes")
  14. Me.InitUI()
  15. Me.Resize(220, 90)
  16. Me.Move(300, 300)
  17. Me.Show()
  18. End Sub
  19. Private Sub InitUI()
  20. Dim grid As New QGridLayout(Me)
  21. grid.Spacing = 2
  22. Dim errb As New QPushButton("Error", Me)
  23. Dim warnb As New QPushButton("Warning", Me)
  24. Dim questb As New QPushButton("Question", Me)
  25. Dim infob As New QPushButton("Information", Me)
  26. Dim aboutb As New QPushButton("About", Me)
  27. grid.AddWidget(errb, 0, 0)
  28. grid.AddWidget(warnb, 0, 1)
  29. grid.AddWidget(questb, 1, 0)
  30. grid.AddWidget(infob, 1, 1)
  31. grid.AddWidget(aboutb, 2, 0)
  32. Connect(errb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
  33. Connect(warnb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
  34. Connect(questb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
  35. Connect(infob, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
  36. Connect(aboutb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
  37. End Sub
  38. <Q_SLOT()> _
  39. Private Sub OnClicked()
  40. Dim button As QPushButton = Sender()
  41. If "Error".Equals(button.Text())
  42. QMessageBox.critical(Me, "Error", "Error loading file!")
  43. Else If "Warning".Equals(button.Text())
  44. QMessageBox.warning(Me, "Warning", "Operation not permitted!")
  45. Else If "Question".Equals(button.Text())
  46. QMessageBox.question(Me, "Question", "Are you sure to quit?")
  47. Else If "Information".Equals(button.Text())
  48. QMessageBox.information(Me, "Information", "Download completed.")
  49. Else If "About".Equals(button.Text())
  50. QMessageBox.about(Me, "About", "ZetCode Qyoto Visual Basic tutorial.")
  51. End If
  52. End Sub
  53. Public Shared Sub Main(ByVal args() As String)
  54. Dim qapp As New QApplication(args)
  55. Dim app As New VBQApp
  56. QApplication.Exec()
  57. End Sub
  58. End Class

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

  1. Dim button As QPushButton = Sender()

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

  1. If "Error".Equals(button.Text())
  2. QMessageBox.critical(Me, "Error", "Error loading file!")

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

302.md - 图1

302.md - 图2

302.md - 图3

302.md - 图4

302.md - 图5

QInputDialog

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

  1. ' ZetCode Mono Visual Basic Qt tutorial
  2. '
  3. ' This program shows
  4. ' QInputDialog dialogs
  5. '
  6. ' author jan bodnar
  7. ' last modified May 2009
  8. ' website www.zetcode.com
  9. Imports Qyoto
  10. Public Class VBQApp
  11. Inherits QWidget
  12. Dim edit As QLineEdit
  13. Public Sub New()
  14. Me.SetWindowTitle("QInputDialog")
  15. Me.InitUI()
  16. Me.Resize(300, 150)
  17. Me.Move(300, 300)
  18. Me.Show()
  19. End Sub
  20. Private Sub InitUI()
  21. Dim show As New QPushButton("Dialog", Me)
  22. Connect(show, SIGNAL("clicked()"), Me, SLOT("ShowDialog()"))
  23. show.FocusPolicy = FocusPolicy.NoFocus
  24. show.Move(20, 20)
  25. edit = New QLineEdit(Me)
  26. edit.Move(130, 22)
  27. End Sub
  28. <Q_SLOT()> _
  29. Private Sub ShowDialog()
  30. Dim text As String = QInputDialog.GetText( _
  31. Me, "Input Dialog", "Enter your name")
  32. If text <> Nothing AndAlso text.Trim() <> String.Empty
  33. edit.SetText(text)
  34. End If
  35. End Sub
  36. Public Shared Sub Main(ByVal args() As String)
  37. Dim qapp As New QApplication(args)
  38. Dim app As New VBQApp
  39. QApplication.Exec()
  40. End Sub
  41. End Class

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

  1. Dim text As String = QInputDialog.GetText( _
  2. Me, "Input Dialog", "Enter your name")

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

  1. If text <> Nothing AndAlso text.Trim() <> String.Empty
  2. edit.SetText(text)
  3. End If

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

302.md - 图6

图:输入对话框

QColorDialog

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

  1. ' ZetCode Mono Visual Basic Qt tutorial
  2. '
  3. ' In this program, we use the
  4. ' QColorDialog to change the color
  5. ' of a label text
  6. '
  7. ' author jan bodnar
  8. ' last modified May 2009
  9. ' website www.zetcode.com
  10. Imports Qyoto
  11. Public Class VBQApp
  12. Inherits QWidget
  13. Dim label As QLabel
  14. Public Sub New()
  15. Me.SetWindowTitle("QColorDialog")
  16. Me.InitUI()
  17. Me.Resize(300, 150)
  18. Me.Move(300, 300)
  19. Me.Show()
  20. End Sub
  21. Private Sub InitUI()
  22. label = New QLabel("ZetCode Qyoto Visual Basic tutorial", Me)
  23. Dim vbox As New QVBoxLayout(Me)
  24. label.Alignment = AlignmentFlag.AlignCenter
  25. vbox.AddWidget(label)
  26. End Sub
  27. Protected Overrides Sub MousePressEvent(ByVal e As QMouseEvent)
  28. Dim color As QColor = QColorDialog.GetColor()
  29. If Not color.IsValid() Then
  30. Return
  31. End If
  32. Dim style As String = String.Format("QWidget {{ color: {0} }}", _
  33. color.Name())
  34. label.SetStyleSheet(style)
  35. End Sub
  36. Public Shared Sub Main(ByVal args() As String)
  37. Dim qapp As New QApplication(args)
  38. Dim app As New VBQApp
  39. QApplication.Exec()
  40. End Sub
  41. End Class

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

  1. Protected Overrides Sub MousePressEvent(ByVal e As QMouseEvent)
  2. ...
  3. End Sub

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

  1. Dim color As QColor = QColorDialog.GetColor()

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

  1. If Not color.IsValid() Then
  2. Return
  3. End If

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

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

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

302.md - 图7

图:QColorDialog

QFontDialog

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

  1. ' ZetCode Mono Visual Basic Qt tutorial
  2. '
  3. ' In this program, we use the
  4. ' QFontDialog to change the font
  5. ' of a label text
  6. '
  7. ' author jan bodnar
  8. ' last modified May 2009
  9. ' website www.zetcode.com
  10. Imports Qyoto
  11. Public Class VBQApp
  12. Inherits QWidget
  13. Dim label As QLabel
  14. Public Sub New()
  15. Me.SetWindowTitle("QFontDialog")
  16. Me.InitUI()
  17. Me.Resize(300, 150)
  18. Me.Move(300, 300)
  19. Me.Show()
  20. End Sub
  21. Private Sub InitUI()
  22. label = New QLabel("ZetCode Qyoto Visual Basic tutorial", Me)
  23. Dim vbox As New QVBoxLayout(Me)
  24. label.Alignment = AlignmentFlag.AlignCenter
  25. vbox.AddWidget(label)
  26. End Sub
  27. Protected Overrides Sub MousePressEvent(ByVal e As QMouseEvent)
  28. Dim ok As Boolean = True
  29. Dim font As QFont = QFontDialog.GetFont(ok)
  30. If Not ok Then
  31. Return
  32. End If
  33. label.Font = font
  34. End Sub
  35. Public Shared Sub Main(ByVal args() As String)
  36. Dim qapp As New QApplication(args)
  37. Dim app As New VBQApp
  38. QApplication.Exec()
  39. End Sub
  40. End Class

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

  1. Dim font As QFont = QFontDialog.GetFont(ok)

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

  1. If Not ok Then
  2. Return
  3. End If

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

  1. label.Font = font

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

302.md - 图8

图:QFontDialog

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

{% endraw %}