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.
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.
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.
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 we didn't press the OK button.
label.Font = font
The font field stores the selected font. We update the label's font to the newly selected font.
In this part of the Visual Basic Qyoto tutorial, we worked with dialog windows.