返回介绍

Qyoto dialogs

发布于 2025-02-22 22:19:48 字数 10550 浏览 0 评论 0 收藏 0

In this part of the Visual Basic Qyoto programming tutorial, we will work with dialogs.

Dialog windows or dialogs are an indispensable part of most modern GUI applications. A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc. Dialogs are important means of communication between a user and a computer program.

Message boxes

Message boxes are convenient dialogs that provide messages to the user of the application. The message consists of text and image data.

' ZetCode Mono Visual Basic Qt tutorial
'
' This program shows
' QMessageBox dialogs
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com


Imports Qyoto


Public Class VBQApp 
  Inherits QWidget

  Public Sub New()
  
    Me.SetWindowTitle("Message boxes")
  
    Me.InitUI()
    
    Me.Resize(220, 90)
    Me.Move(300, 300)
    Me.Show()
    
  End Sub
  
  Private Sub InitUI()
  
    Dim grid As New QGridLayout(Me)
    grid.Spacing = 2

    Dim errb As New QPushButton("Error", Me)
    Dim warnb As New QPushButton("Warning", Me)
    Dim questb As New QPushButton("Question", Me)
    Dim infob As New QPushButton("Information", Me)
    Dim aboutb As New QPushButton("About", Me)

    grid.AddWidget(errb, 0, 0)
    grid.AddWidget(warnb, 0, 1)
    grid.AddWidget(questb, 1, 0)
    grid.AddWidget(infob, 1, 1)
    grid.AddWidget(aboutb, 2, 0)
    
    Connect(errb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
    Connect(warnb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
    Connect(questb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
    Connect(infob, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
    Connect(aboutb, SIGNAL("clicked()"), Me, SLOT("OnClicked()"))
  
  End Sub

  <Q_SLOT()> _
  Private Sub OnClicked()

    Dim button As QPushButton = Sender()

    If "Error".Equals(button.Text())
      QMessageBox.critical(Me, "Error", "Error loading file!")
    Else If "Warning".Equals(button.Text())
      QMessageBox.warning(Me, "Warning", "Operation not permitted!")
    Else If "Question".Equals(button.Text())
      QMessageBox.question(Me, "Question", "Are you sure to quit?")
    Else If "Information".Equals(button.Text())
      QMessageBox.information(Me, "Information", "Download completed.")
    Else If "About".Equals(button.Text())
      QMessageBox.about(Me, "About", "ZetCode Qyoto Visual Basic tutorial.")    
    End If
     
  End Sub

  Public Shared Sub Main(ByVal args() As String)
    Dim qapp As New QApplication(args)
    Dim app As New VBQApp
    QApplication.Exec()
  End Sub

End Class

We use the GridLayout manager to set up a grid of five buttons. Each of the buttons shows a different message box.

Dim button As QPushButton = Sender()

Here we determine, which button called the ShowDialog() method.

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

In case we pressed the error button, we show the error dialog. We use static methods of the QMessageBox class to show the message boxes.

Information message dialog Warning message dialog Question message dialog Error message dialog About message dialog

QInputDialog

The QInputDialog class provides a simple convenience dialog to get a single value from the user. The input value can be a string, a number or an item from a list. A label must be set to tell the user what they should enter.

' ZetCode Mono Visual Basic Qt tutorial
'
' This program shows
' QInputDialog dialogs
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com


Imports Qyoto


Public Class VBQApp 
  Inherits QWidget

  Dim edit As QLineEdit

  Public Sub New()
  
    Me.SetWindowTitle("QInputDialog")
  
    Me.InitUI()
    
    Me.Resize(300, 150)
    Me.Move(300, 300)
    Me.Show()
    
  End Sub
  
  Private Sub InitUI()
  
    Dim show As New QPushButton("Dialog", Me)
    
    Connect(show, SIGNAL("clicked()"), Me, SLOT("ShowDialog()"))

    show.FocusPolicy = FocusPolicy.NoFocus
    show.Move(20, 20)

    edit = New QLineEdit(Me)
    edit.Move(130, 22)
  
  End Sub

  <Q_SLOT()> _
  Private Sub ShowDialog()

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

    If text <> Nothing AndAlso text.Trim() <> String.Empty
      edit.SetText(text)
    End If
     
  End Sub

  Public Shared Sub Main(ByVal args() As String)
    Dim qapp As New QApplication(args)
    Dim app As New VBQApp
    QApplication.Exec()
  End Sub

End Class

In the code example, we have a button and a line edit. The button shows an input dialog. We get some text and the text is shown in the line edit widget.

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

The GetText() static method creates the input dialog. The text from the dialog is stored in the text variable.

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

Before we update the line edit, we ensure that the text variable is not null and that it is not empty and does not consists only from spaces.

Input dialog
Figure: Input dialog

QColorDialog

The QColorDialog class provides a dialog widget for specifying colors. The color dialog's function is to allow users to choose colors.

' ZetCode Mono Visual Basic Qt tutorial
'
' In this program, we use the
' QColorDialog to change the color
' of a label text
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com


Imports Qyoto


Public Class VBQApp 
  Inherits QWidget

  Dim label As QLabel

  Public Sub New()
  
    Me.SetWindowTitle("QColorDialog")
  
    Me.InitUI()
    
    Me.Resize(300, 150)
    Me.Move(300, 300)
    Me.Show()
    
  End Sub
  
  Private Sub InitUI()
  
    label = New QLabel("ZetCode Qyoto Visual Basic tutorial", Me)

    Dim vbox As New QVBoxLayout(Me)
    label.Alignment = AlignmentFlag.AlignCenter
    vbox.AddWidget(label)
  
  End Sub
  
  Protected Overrides Sub MousePressEvent(ByVal e As QMouseEvent)

    Dim color As QColor = QColorDialog.GetColor()

    If Not color.IsValid() Then
      Return
    End If

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

  
  Public Shared Sub Main(ByVal args() As String)
    Dim qapp As New QApplication(args)
    Dim app As New VBQApp
    QApplication.Exec()
  End Sub

End Class

We show a some text in the center of the window. By clicking on the area of the window, we show a color dialog. We change the text foreground color to the selected color from the dialog.

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

In order to receive mouse press events for our window, we must override the MousePressEvent() method.

Dim color As QColor = QColorDialog.GetColor()

The QColorDialog is being created. The selected color is stored in the color variable.

If Not color.IsValid() Then
  Return
End If

We do nothing, when the cancel button was pressed.

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

Here we update the foreground color of the label's text.

QColorDialog
Figure: QColorDialog

QFontDialog

The QFontDialog class provides a dialog widget for selecting a font.

' ZetCode Mono Visual Basic Qt tutorial
'
' In this program, we use the
' QFontDialog to change the font
' of a label text
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com


Imports Qyoto


Public Class VBQApp 
  Inherits QWidget

  Dim label As QLabel

  Public Sub New()
  
    Me.SetWindowTitle("QFontDialog")
  
    Me.InitUI()
    
    Me.Resize(300, 150)
    Me.Move(300, 300)
    Me.Show()
    
  End Sub
  
  Private Sub InitUI()
  
    label = New QLabel("ZetCode Qyoto Visual Basic tutorial", Me)

    Dim vbox As New QVBoxLayout(Me)
    label.Alignment = AlignmentFlag.AlignCenter
    vbox.AddWidget(label)
  
  End Sub
  
  Protected Overrides Sub MousePressEvent(ByVal e As QMouseEvent)

    Dim ok As Boolean = True
    
    Dim font As QFont = QFontDialog.GetFont(ok)
    
    If Not ok Then
      Return
    End If
    
    label.Font = font
    
  End Sub

  
  Public Shared Sub Main(ByVal args() As String)
    Dim qapp As New QApplication(args)
    Dim app As New VBQApp
    QApplication.Exec()
  End Sub

End Class

This example is similar to the previous one. This time, we change the font of the text.

Dim font As QFont = QFontDialog.GetFont(ok)

The QFontDialog is being created. The boolean ok variable is set, when we press the OK button of the dialog.

If Not ok Then
  Return
End If

We do nothing if the OK button was not pressed.

label.Font = font

The font field stores the selected font. We update the label's font to the newly selected font.

QFontDialog
Figure: QFontDialog

In this part of the Visual Basic Qyoto tutorial, we worked with dialog windows.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文