Qyoto dialogs

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.