new common + quick/errors examples

This commit is contained in:
therecipe 2017-05-24 18:40:18 +02:00
parent bb6259c35d
commit dc62b1d5ff
21 changed files with 1851 additions and 1 deletions

View file

@ -0,0 +1,90 @@
package main
func buttons() {
//Push Button
createWidget("Push Button", `
Item {
Button {
anchors.centerIn: parent
text: "Push Button"
onClicked: console.log("You Clicked The Push Button")
}
}
`)
//Tool Button (+ ToolBar)
createWidget("Tool Button", `
Item {
ToolBar {
RowLayout {
anchors.fill: parent
ToolButton {
Layout.fillHeight: true
text: "Tool Button"
onClicked: console.log("You Clicked The Tool Button")
}
}
}
}
`)
//Radio Button
createWidget("Radio Button", `
Item {
ColumnLayout {
anchors.fill: parent
ExclusiveGroup { id: radioGroup }
RadioButton {
text: "Radio Button 0"
onClicked: console.log("You Clicked The " + text)
exclusiveGroup: radioGroup
}
RadioButton {
text: "Radio Button 1"
onClicked: console.log("You Clicked The " + text)
exclusiveGroup: radioGroup
}
RadioButton {
text: "Radio Button 2"
onClicked: console.log("You Clicked The " + text)
exclusiveGroup: radioGroup
}
}
}`)
//Check Box
createWidget("Check Box", `
Item {
CheckBox {
anchors.centerIn: parent
text: "Check Box"
onClicked: console.log("You Clicked The Check Box :", checked)
}
}`)
//Dialog Button Box
createWidget("Dialog Button Box", `
Item {
RowLayout {
anchors.fill: parent
Button {
text: "Cancel"
onClicked: console.log("You Clicked The Accept Button")
}
Button {
text: "OK"
isDefault: true
onClicked: console.log("You Clicked The Reject Button")
}
}
}`)
}

View file

@ -0,0 +1,145 @@
package main
func containers() {
//Group Box
createWidget("Group Box", `
Item {
GroupBox {
anchors.centerIn: parent
title: "Group Box"
ColumnLayout {
Button {
text: "Push Button: 0"
}
Button {
text: "Push Button: 1"
}
Button {
text: "Push Button: 2"
}
}
}
}`)
//Scroll Area
createWidget("Scroll Area", `
ScrollView {
GridLayout {
width: 250
height: 250
rowSpacing: 0
columnSpacing: 0
columns: 2
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "blue"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "red"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "green"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "yellow"
}
}
}`)
//Tab Widget
createWidget("Tab Widget", `
TabView {
Tab {
title: "red"
Rectangle { color: "red" }
}
Tab {
title: "blue"
Rectangle { color: "blue" }
}
Tab {
title: "green"
Rectangle { color: "green" }
}
Tab {
title: "yellow"
Rectangle { color: "yellow" }
}
}`)
//Stacked Widget
createWidget("Stacked Widget", `
MouseArea {
Text {
z: 1
anchors.centerIn: parent
text: "Click Me!"
}
StackView {
id: stack
anchors.fill: parent
initialItem: blue
Rectangle {
id: blue
color: "blue"
}
Rectangle {
id: red
color: "red"
}
Rectangle {
id: green
color: "green"
}
Rectangle {
id: yellow
color: "yellow"
}
}
onClicked: {
switch (stack.depth) {
case 1:
stack.push(red)
break;
case 2:
stack.push(green)
break;
case 3:
stack.push(yellow)
break;
case 4:
stack.pop(blue)
break;
}
}
}
`)
}

View file

@ -0,0 +1,64 @@
package main
func displayWidgets() {
//Label
createWidget("Label", `
Item {
Label {
anchors.centerIn: parent
text: "This Is A Label"
}
}`)
//Text
createWidget("Text", `
Item {
Text {
anchors.centerIn: parent
text: "This Is A Text Item"
}
}`)
//Calendar Widget
createWidget("Calendar Widget", `
Calendar {
onClicked: console.log("Calender Widget Selected Date Changed To:", date)
}`)
//Progress Bar
createWidget("Progress Bar", `
Item {
ProgressBar {
id: progressBar
anchors.centerIn: parent
minimumValue: 0
maximumValue: 1000
value: 500
NumberAnimation on value {
from: 0
to: 1000
duration: 4000
loops: Animation.Infinite
}
}
}`)
//Image
createWidget("Image", `
Image {
fillMode: Image.PreserveAspectFit
source: "qrc:///qml/earth.png"
}`)
//BusyIndicator
createWidget("Busy Indicator", `
Item {
BusyIndicator {
anchors.centerIn: parent
}
}`)
}

View file

@ -0,0 +1,170 @@
package main
import (
"github.com/therecipe/qt/core"
)
func inputWidgets() {
//Abstract List Model Used By The Combo Box
listDB := []string{"Some", "Combo", "Box", "Items"}
listModel := core.NewQAbstractListModel(nil)
listModel.ConnectRowCount(func(parent *core.QModelIndex) int {
return len(listDB)
})
listModel.ConnectData(func(index *core.QModelIndex, role int) *core.QVariant {
if role != int(core.Qt__DisplayRole) {
return core.NewQVariant()
}
return core.NewQVariant14(listDB[index.Row()])
})
//Combo Box
createWidget("Combo Box", `
Item {
ComboBox {
anchors.centerIn: parent
model: ["Some", "Combo", "Box", "Items"]
onActivated: console.log("Combo Box Index Changed To:", index, model[index])
}
}`)
//Combo Box + List Model
createWidget("Combo Box + List Model", `
Item {
ComboBox {
anchors.centerIn: parent
model: ListModel {
ListElement { text: "Some" }
ListElement { text: "Combo" }
ListElement { text: "Box" }
ListElement { text: "Items" }
}
onActivated: console.log("Combo Box Index Changed To:", index, model.get(index).text)
}
}`)
//Combo Box + Go Model
createWidgetWithContext("Combo Box + Go Model", `
Item {
ComboBox {
anchors.centerIn: parent
model: goListModel
textRole: "display"
onActivated: console.log("Combo Box Index Changed To:", index, model.data(model.index(index, 0)))
}
}`, "goListModel", listModel)
//Combo Box + Go String List Model
createWidgetWithContext("Combo Box + Go String List Model", `
Item {
ComboBox {
anchors.centerIn: parent
model: goListModel
textRole: "display"
onActivated: console.log("Combo Box Index Changed To:", index, model.data(model.index(index, 0)))
}
}`, "goListModel", core.NewQStringListModel2(listDB, nil))
//Text Field
createWidget("Text Field", `
Item {
TextField {
anchors.centerIn: parent
onTextChanged: console.log("Text Field Text Changed To:", text)
}
}
`)
//Text Input
createWidget("Text Input", `
Item {
TextInput {
anchors.centerIn: parent
text: "Some Editable Text"
onTextChanged: console.log("Text Input Text Changed To:", text)
}
}
`)
//Text Area
createWidget("Text Area", `
TextArea {
onTextChanged: console.log("Text Area Text Changed To:", text)
}
`)
//Text Edit
createWidget("Text Edit", `
TextEdit {
onTextChanged: console.log("Text Edit Text Changed To:", text)
}
`)
//Spin Box
createWidget("Spin Box", `
Item {
SpinBox {
anchors.centerIn: parent
minimumValue: 0
maximumValue: 1000
value: 500
onValueChanged: console.log("Spin Box Value Changed To:", value)
}
}`)
//Double Spin Box
createWidget("Double Spin Box", `
Item {
SpinBox {
anchors.centerIn: parent
minimumValue: 0
maximumValue: 1000
value: 500
decimals: 2
onValueChanged: console.log("Spin Box Value Changed To:", value)
}
}`)
//Switch
createWidget("Switch", `
Item {
Switch {
anchors.centerIn: parent
onClicked: console.log("Switch Button Clicked:", checked)
}
}`)
//Horizontal Slider
createWidget("Horizontal Slider", `
Item {
Slider {
anchors.centerIn: parent
minimumValue: 0
maximumValue: 1000
value: 500
orientation: Qt.Horizontal
stepSize: 1
onValueChanged: console.log("Horizontal Slider Value Changed To:", value)
}
}
`)
//Vertical Slider
createWidget("Vertical Slider", `
Item {
Slider {
anchors.centerIn: parent
minimumValue: 0
maximumValue: 1000
value: 500
orientation: Qt.Vertical
stepSize: 1
onValueChanged: console.log("Vertical Slider Value Changed To:", value)
}
}
`)
}

View file

@ -0,0 +1,301 @@
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
)
func itemViews() {
//Abstract List Model Used By The List And Table View
listDB := []map[string]string{
{"name": "Apple", "cost": "2.45"},
{"name": "Orange", "cost": "3.25"},
{"name": "Banana", "cost": "1.95"},
}
listRoles := map[int]*core.QByteArray{
int(core.Qt__UserRole) + 1: core.NewQByteArray2("name", -1),
int(core.Qt__UserRole) + 2: core.NewQByteArray2("cost", -1),
}
listModel := core.NewQAbstractListModel(nil)
listModel.ConnectRowCount(func(parent *core.QModelIndex) int {
return len(listDB)
})
listModel.ConnectData(func(index *core.QModelIndex, role int) *core.QVariant {
if _, ok := listRoles[role]; !ok {
return core.NewQVariant()
}
return core.NewQVariant14(listDB[index.Row()][listRoles[role].ConstData()])
})
listModel.ConnectRoleNames(func() map[int]*core.QByteArray {
return listRoles
})
//Standard Item Model Used By The Tree View
treeModel := gui.NewQStandardItemModel(nil)
rootNode := treeModel.InvisibleRootItem()
americaItem := gui.NewQStandardItem2("America")
mexicoItem := gui.NewQStandardItem2("Canada")
usaItem := gui.NewQStandardItem2("USA")
bostonItem := gui.NewQStandardItem2("Boston")
europeItem := gui.NewQStandardItem2("Europe")
italyItem := gui.NewQStandardItem2("Italy")
romeItem := gui.NewQStandardItem2("Rome")
veronaItem := gui.NewQStandardItem2("Verona")
rootNode.AppendRow2(americaItem)
rootNode.AppendRow2(europeItem)
americaItem.AppendRow2(mexicoItem)
americaItem.AppendRow2(usaItem)
usaItem.AppendRow2(bostonItem)
europeItem.AppendRow2(italyItem)
italyItem.AppendRow2(romeItem)
italyItem.AppendRow2(veronaItem)
//List View + List Model
createWidget("List View + List Model", `
ListView {
model: ListModel {
ListElement {
name: "Apple"
cost: 2.45
}
ListElement {
name: "Orange"
cost: 3.25
}
ListElement {
name: "Banana"
cost: 1.95
}
}
delegate: RowLayout {
Text { text: "Fruit: " + name }
Text { text: "Cost: $" + cost }
}
}`)
//List View + JSON Model
createWidget("List View + JSON Model", `
ListView {
model: ListModel {
Component.onCompleted: {
var elements =
[
{ "name": "Apple", "cost": "2.45" },
{ "name": "Orange", "cost": "3.25" },
{ "name": "Banana", "cost": "1.95" }
]
for (var i = 0; i < elements.length; i++) {
append(elements[i])
}
}
}
delegate: RowLayout {
Text { text: "Fruit: " + name }
Text { text: "Cost: $" + cost }
}
}`)
//List View + Go Model
createWidgetWithContext("List View + Go Model", `
ListView {
model: goListModel
delegate: RowLayout {
Text { text: "Fruit: " + name }
Text { text: "Cost: $" + cost }
}
}`, "goListModel", listModel)
//List View + Go String List Model
createWidgetWithContext("List View + Go String List Model", `
ListView {
model: goListModel
delegate: Text { text: display }
}`, "goListModel", core.NewQStringListModel2([]string{"Some", "String", "List", "Items"}, nil))
//Tree View + List Model
//TODO:
//Tree View + JSON Model
//TODO:
//Tree View + Go Model
createWidgetWithContext("Tree View + Go Model", `
TreeView {
model: goTreeModel
TableViewColumn {
role: "display"
}
}`, "goTreeModel", treeModel)
//Table View + List Model
createWidget("Table View + List Model", `
TableView {
model: ListModel {
ListElement {
name: "Apple"
cost: 2.45
}
ListElement {
name: "Orange"
cost: 3.25
}
ListElement {
name: "Banana"
cost: 1.95
}
}
TableViewColumn {
role: "name"
title: role
}
TableViewColumn {
role: "cost"
title: role
}
}`)
//Table View + JSON Model
createWidget("Table View + JSON Model", `
TableView {
model: ListModel {
Component.onCompleted: {
var elements =
[
{ "name": "Apple", "cost": "2.45" },
{ "name": "Orange", "cost": "3.25" },
{ "name": "Banana", "cost": "1.95" }
]
for (var i = 0; i < elements.length; i++) {
append(elements[i])
}
}
}
TableViewColumn {
role: "name"
title: role
}
TableViewColumn {
role: "cost"
title: role
}
}`)
//Table View + Go Model
createWidgetWithContext("Table View + Go Model", `
TableView {
model: goListModel
TableViewColumn {
role: "name"
title: role
}
TableViewColumn {
role: "cost"
title: role
}
}`, "goListModel", listModel)
//Grid View + List Model
createWidget("Grid View + List Model", `
GridView {
cellWidth: width / (model.count / 2)
cellHeight: height / (model.count / 2)
model: ListModel {
ListElement {
color: "blue"
}
ListElement {
color: "red"
}
ListElement {
color: "green"
}
ListElement {
color: "yellow"
}
}
delegate: Rectangle {
width: cellWidth
height: cellHeight
color: model.color
}
}`)
//Grid View + JSON Model
createWidget("Grid View + JSON Model", `
GridView {
cellWidth: width / (model.count / 2)
cellHeight: height / (model.count / 2)
model: ListModel {
Component.onCompleted: {
var elements =
[
{ "color": "blue" },
{ "color": "red" },
{ "color": "green" },
{ "color": "yellow" }
]
for (var i = 0; i < elements.length; i++) {
append(elements[i])
}
}
}
delegate: Rectangle {
width: cellWidth
height: cellHeight
color: model.color
}
}`)
//Grid View + Go Model
createWidgetWithContext("Grid View + Go Model", `
GridView {
cellWidth: width / (model.count / 2)
cellHeight: height / (model.count / 2)
model: goListModel
delegate: Rectangle {
width: cellWidth
height: cellHeight
color: display
}
}`, "goListModel", core.NewQStringListModel2([]string{"blue", "red", "green", "yellow"}, nil))
}

View file

@ -0,0 +1,117 @@
package main
func layouts() {
//Vertical Layout
createWidget("Vertical Layout", `
ColumnLayout {
spacing: 0
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: parent.height * 0.3
color: "blue"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "red"
}
}`)
//Horizontal Layout
createWidget("Horizontal Layout", `
RowLayout {
spacing: 0
Rectangle {
Layout.preferredWidth: parent.width * 0.3
Layout.fillHeight: true
color: "blue"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "red"
}
}`)
//Grid Layout
createWidget("Grid Layout", `
GridLayout {
rowSpacing: 0
columnSpacing: 0
columns: 2
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "blue"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "red"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "green"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "yellow"
}
}`)
//Stack Layout
createWidget("Stack Layout", `
MouseArea {
Text {
z: 1
anchors.centerIn: parent
text: "Click Me!"
}
StackLayout {
id: stackLayout
anchors.fill: parent
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "blue"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "red"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "green"
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
color: "yellow"
}
onCurrentIndexChanged: if (currentIndex >= count) { currentIndex = 0 }
}
onClicked: stackLayout.currentIndex++
}`)
}

View file

@ -0,0 +1,82 @@
package main
import (
"io/ioutil"
"os"
"path/filepath"
"strings"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/quick"
"github.com/therecipe/qt/widgets"
)
var (
centralLayout *widgets.QGridLayout
centralLayoutRow int
centralLayoutColumn int
)
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
mainWindow := widgets.NewQMainWindow(nil, 0)
mainWindow.SetWindowTitle("Common QML (+ Quick Controls 1)")
scrollWidget := widgets.NewQScrollArea(nil)
centralWidget := widgets.NewQWidget(nil, 0)
centralLayout = widgets.NewQGridLayout(centralWidget)
layouts()
buttons()
itemViews()
containers()
inputWidgets()
displayWidgets()
scrollWidget.SetWidget(centralWidget)
mainWindow.SetCentralWidget(scrollWidget)
mainWindow.ShowMaximized()
widgets.QApplication_Exec()
}
func addWidget(widget widgets.QWidget_ITF) {
if centralLayoutColumn > 6 {
centralLayoutColumn = 0
centralLayoutRow++
}
wrappedWidget := widgets.NewQGroupBox2(widget.QWidget_PTR().WindowTitle(), nil)
wrappedWidgetLayout := widgets.NewQVBoxLayout2(wrappedWidget)
wrappedWidgetLayout.AddWidget(widget, 0, core.Qt__AlignCenter)
widget.QWidget_PTR().SetFixedSize2(200, 200)
wrappedWidget.SetFixedSize2(250, 250)
centralLayout.AddWidget(wrappedWidget, centralLayoutRow, centralLayoutColumn, core.Qt__AlignCenter)
centralLayoutColumn++
}
func createWidgetWithContext(name, code, ctxName string, ctx core.QObject_ITF) {
quickWidget := quick.NewQQuickWidget(nil)
quickWidget.SetWindowTitle(name)
quickWidget.RootContext().SetContextProperty(ctxName, ctx)
quickWidget.SetResizeMode(quick.QQuickWidget__SizeRootObjectToView)
path := filepath.Join(os.TempDir(), "tmp"+strings.Replace(name, " ", "", -1)+".qml")
ioutil.WriteFile(path, []byte("import QtQuick 2.0\nimport QtQuick.Layouts 1.3\nimport QtQuick.Controls 1.4\n"+code), 0644)
quickWidget.SetSource(core.QUrl_FromLocalFile(path))
addWidget(quickWidget)
}
func createWidget(name, code string) {
createWidgetWithContext(name, code, "", nil)
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View file

@ -0,0 +1,7 @@
import QtQuick 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.4
Item {}
//this file is just here to inform qtdeploy about the needed QML dependencies

View file

@ -0,0 +1,83 @@
package main
import (
"fmt"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
func buttons() {
//Push Button
pushButton := widgets.NewQPushButton2("Push Button", nil)
pushButton.SetWindowTitle("Push Button")
pushButton.ConnectClicked(func(checked bool) {
println("You Clicked The Push Button")
})
addWidget(pushButton)
//Tool Button (+ ToolBar)
toolWindow := widgets.NewQMainWindow(nil, 0)
toolWindow.SetWindowTitle("Tool Button")
toolBar := toolWindow.AddToolBar3("Just Some ToolBar")
toolBar.SetAllowedAreas(core.Qt__AllToolBarAreas)
toolBar.SetMovable(true)
toolBar.SetFloatable(true)
toolButton := widgets.NewQToolButton(nil)
toolButton.SetIcon(toolButton.Style().StandardIcon(widgets.QStyle__SP_DialogHelpButton, nil, nil))
toolButton.ConnectClicked(func(checked bool) {
println("You Clicked The Tool Button")
toolBar.AddSeparator()
})
toolBar.AddWidget(toolButton)
addWidget(toolWindow)
//Radio Button
radioButtonGroup := widgets.NewQWidget(nil, 0)
radioButtonGroup.SetWindowTitle("Radio Button")
radioButtonGroupLayout := widgets.NewQVBoxLayout2(radioButtonGroup)
for i := 0; i < 3; i++ {
radioButton := widgets.NewQRadioButton2(fmt.Sprintf("Radio Button %v", i), nil)
radioButton.ConnectClicked(func(checked bool) {
println("You Clicked The " + radioButton.Text())
})
radioButtonGroupLayout.AddWidget(radioButton, 0, 0)
}
addWidget(radioButtonGroup)
//Check Box
checkBox := widgets.NewQCheckBox2("Check Box", nil)
checkBox.SetWindowTitle("Check Box")
checkBox.ConnectClicked(func(checked bool) {
println("You Clicked The Check Box :", checked)
})
addWidget(checkBox)
//Command Link Button
commandLinkButton := widgets.NewQCommandLinkButton2("Command Link Button", nil)
commandLinkButton.SetWindowTitle("Command Link Button")
commandLinkButton.ConnectClicked(func(checked bool) {
println("You Clicked The Command Link Button")
})
addWidget(commandLinkButton)
//Dialog Button Box
dialogButtonBox := widgets.NewQDialogButtonBox3(widgets.QDialogButtonBox__Cancel|widgets.QDialogButtonBox__Ok, nil)
dialogButtonBox.SetWindowTitle("Dialog Button Box")
dialogButtonBox.ConnectAccepted(func() {
println("You Clicked The Accept Button")
})
dialogButtonBox.ConnectRejected(func() {
println("You Clicked The Reject Button")
})
addWidget(dialogButtonBox)
}

View file

@ -0,0 +1,151 @@
package main
import (
"fmt"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
func containers() {
//Group Box
groupBox := widgets.NewQGroupBox2("Group Box", nil)
groupBox.SetWindowTitle("Group Box")
groupBoxLayout := widgets.NewQVBoxLayout2(groupBox)
for i := 0; i < 3; i++ {
groupBoxLayout.AddWidget(widgets.NewQPushButton2(fmt.Sprintf("PushButton: %v", i), nil), 0, 0)
}
addWidget(groupBox)
//Scroll Area
scrollArea := widgets.NewQScrollArea(nil)
scrollArea.SetWindowTitle("Scroll Area")
scrollAreaWidget := widgets.NewQWidget(nil, 0)
scrollAreaWidgetLayout := widgets.NewQGridLayout(scrollAreaWidget)
for row := 0; row < 25; row++ {
for column := 0; column < 25; column++ {
scrollAreaWidgetLayout.AddWidget(widgets.NewQLabel2(fmt.Sprintf("[%v:%v]", row, column), nil, 0), row, column, core.Qt__AlignCenter)
}
}
scrollArea.SetWidget(scrollAreaWidget)
addWidget(scrollArea)
//Tool Box
toolBox := widgets.NewQToolBox(nil, 0)
toolBox.SetWindowTitle("Tool Box")
toolBox.AddItem2(widgets.NewQLabel2("First Widget", nil, 0), "First")
toolBox.AddItem2(widgets.NewQPushButton2("Second Widget", nil), "Second")
toolBox.AddItem2(widgets.NewQGroupBox2("Third Widget", nil), "Third")
addWidget(toolBox)
//Tab Widget
tabWidget := widgets.NewQTabWidget(nil)
tabWidget.SetWindowTitle("Tab Widget")
tabWidget.AddTab(widgets.NewQLabel2("First Widget", nil, 0), "First")
tabWidget.AddTab(widgets.NewQPushButton2("Second Widget", nil), "Second")
tabWidget.AddTab(widgets.NewQGroupBox2("Third Widget", nil), "Third")
addWidget(tabWidget)
//Stacked Widget
centralWidget := widgets.NewQWidget(nil, 0)
centralWidget.SetWindowTitle("Stacked Widget")
centralWidgetLayout := widgets.NewQVBoxLayout2(centralWidget)
stackedWidget := widgets.NewQStackedWidget(nil)
stackedWidget.AddWidget(widgets.NewQLabel2("First Widget", nil, 0))
stackedWidget.AddWidget(widgets.NewQPushButton2("Second Widget", nil))
stackedWidget.AddWidget(widgets.NewQGroupBox2("Third Widget", nil))
centralWidgetLayout.AddWidget(stackedWidget, 0, 0)
changeStackButton := widgets.NewQPushButton2("Show Next In Stack", nil)
changeStackButton.ConnectClicked(func(checked bool) {
nextIndex := stackedWidget.CurrentIndex() + 1
if nextIndex >= stackedWidget.Count() {
stackedWidget.SetCurrentIndex(0)
} else {
stackedWidget.SetCurrentIndex(nextIndex)
}
})
centralWidgetLayout.AddWidget(changeStackButton, 0, 0)
addWidget(centralWidget)
//Frame
frame := widgets.NewQFrame(nil, 0)
frame.SetWindowTitle("Frame")
frameLayout := widgets.NewQVBoxLayout2(frame)
for i := 0; i < 3; i++ {
someFrame := widgets.NewQFrame(nil, 0)
switch i {
case 0:
someFrame.SetFrameStyle(int(widgets.QFrame__Box) | int(widgets.QFrame__Raised))
case 1:
someFrame.SetFrameStyle(int(widgets.QFrame__Panel) | int(widgets.QFrame__Raised))
case 2:
someFrame.SetFrameStyle(int(widgets.QFrame__StyledPanel) | int(widgets.QFrame__Raised))
}
someFrameLayout := widgets.NewQVBoxLayout2(someFrame)
someFrameLayout.AddWidget(widgets.NewQPushButton2(fmt.Sprintf("PushButton: %v", i), nil), 0, 0)
frameLayout.AddWidget(someFrame, 0, 0)
}
addWidget(frame)
//Widget
widget := widgets.NewQWidget(nil, 0)
widget.SetWindowTitle("Widget")
widgetLayout := widgets.NewQVBoxLayout2(widget)
for i := 0; i < 3; i++ {
someWidget := widgets.NewQWidget(nil, 0)
someWidgetLayout := widgets.NewQVBoxLayout2(someWidget)
someWidgetLayout.AddWidget(widgets.NewQPushButton2(fmt.Sprintf("PushButton: %v", i), nil), 0, 0)
widgetLayout.AddWidget(someWidget, 0, 0)
}
addWidget(widget)
//MDI Area
mdiArea := widgets.NewQMdiArea(nil)
mdiArea.SetWindowTitle("MDI Area")
subWindow := widgets.NewQMdiSubWindow(nil, 0)
sWCentralWidget := widgets.NewQWidget(nil, 0)
sWCentralWidgetLayout := widgets.NewQVBoxLayout2(sWCentralWidget)
sWCentralWidgetLayout.AddWidget(widgets.NewQLabel2("Label", nil, 0), 0, 0)
sWCentralWidgetLayout.AddWidget(widgets.NewQPushButton2("PushButton", nil), 0, 0)
subWindow.SetWidget(sWCentralWidget)
mdiArea.AddSubWindow(subWindow, 0)
mdiArea.Resize2(300, 300)
addWidget(mdiArea)
//Dock Widget
mainWindow := widgets.NewQMainWindow(nil, 0)
mainWindow.SetWindowTitle("Dock Widget")
topDockWidget := widgets.NewQDockWidget("Top Dock Widget", nil, 0)
topDockWidget.SetAllowedAreas(core.Qt__AllDockWidgetAreas)
topDockWidget.SetFloating(true)
topDockWidget.SetWidget(widgets.NewQPushButton2("PushButton", nil))
mainWindow.AddDockWidget(core.Qt__TopDockWidgetArea, topDockWidget)
bottomDockWidget := widgets.NewQDockWidget("Bottom Dock Widget", nil, 0)
bottomDockWidget.SetAllowedAreas(core.Qt__AllDockWidgetAreas)
bottomDockWidget.SetFloating(true)
bottomDockWidget.SetWidget(widgets.NewQPushButton2("PushButton", nil))
mainWindow.AddDockWidget(core.Qt__BottomDockWidgetArea, bottomDockWidget)
addWidget(mainWindow)
}

View file

@ -0,0 +1,85 @@
package main
import (
"io/ioutil"
"os"
"path/filepath"
"time"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/quick"
"github.com/therecipe/qt/widgets"
)
func displayWidgets() {
//Label
label := widgets.NewQLabel2("This Is A Label", nil, 0)
label.SetWindowTitle("Label")
addWidget(label)
//Text Browser
textBrowser := widgets.NewQTextBrowser(nil)
textBrowser.SetWindowTitle("Text Browser")
textBrowser.SetText("This Is A Text Browser")
addWidget(textBrowser)
//Graphics View
graphicsView := widgets.NewQGraphicsView(nil)
graphicsView.SetWindowTitle("Graphics View")
scene := widgets.NewQGraphicsScene(nil)
scene.AddText("This Is A Graphics View (+ Graphics Scene)", gui.NewQFont())
scene.AddRect2(0, 0, scene.Width(), scene.Height(), gui.NewQPen(), gui.NewQBrush())
graphicsView.SetScene(scene)
addWidget(graphicsView)
//Calendar Widget
calendarWidget := widgets.NewQCalendarWidget(nil)
calendarWidget.SetWindowTitle("Calendar Widget")
addWidget(calendarWidget)
//LCD Number
lcdNumber := widgets.NewQLCDNumber(nil)
lcdNumber.SetWindowTitle("LCD Number")
lcdNumber.SetDigitCount(15)
lcdNumber.Display("0123456789.-ABC")
addWidget(lcdNumber)
//Progress Bar
progressBar := widgets.NewQProgressBar(nil)
progressBar.SetWindowTitle("Progress Bar")
progressBar.SetMinimum(0)
progressBar.SetMaximum(1000)
progressBar.SetValue(progressBar.Maximum() / 2)
progressBar.ConnectValueChanged(func(value int) {
if value == progressBar.Maximum() {
progressBar.SetValue(progressBar.Minimum())
}
})
go func() {
for range time.NewTicker(500 * time.Millisecond).C {
progressBar.SetValue(progressBar.Value() + 50)
}
}()
addWidget(progressBar)
//Quick Widget
quickWidget := quick.NewQQuickWidget(nil)
quickWidget.SetWindowTitle("Quick Widget")
quickWidget.SetResizeMode(quick.QQuickWidget__SizeRootObjectToView)
path := filepath.Join(os.TempDir(), "tmpQuickWidget.qml")
ioutil.WriteFile(path, []byte("import QtQuick 2.0\nRectangle{width: 320; height: 320; color:\"red\"}"), 0644)
quickWidget.SetSource(core.QUrl_FromLocalFile(path))
addWidget(quickWidget)
}

View file

@ -0,0 +1,224 @@
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
)
func inputWidgets() {
//Combo Box
comboBox := widgets.NewQComboBox(nil)
comboBox.SetWindowTitle("Combo Box")
items := []string{"Some", "Combo", "Box", "Items"}
comboBox.AddItems(items)
comboBox.ConnectCurrentIndexChanged2(func(text string) {
println("Combo Box Index Changed To:", text)
})
addWidget(comboBox)
//Combo Box + List Model
comboBoxL := widgets.NewQComboBox(nil)
comboBoxL.SetWindowTitle("Combo Box + List Model")
listModel := core.NewQAbstractListModel(nil)
listModel.ConnectRowCount(func(parent *core.QModelIndex) int {
return len(items)
})
listModel.ConnectData(func(index *core.QModelIndex, role int) *core.QVariant {
if role != int(core.Qt__DisplayRole) {
return core.NewQVariant()
}
return core.NewQVariant14(items[index.Row()])
})
comboBoxL.SetModel(listModel)
comboBoxL.ConnectCurrentIndexChanged2(func(text string) {
println("Combo Box Index Changed To:", text)
})
addWidget(comboBoxL)
//Combo Box + String List Model
comboBoxSL := widgets.NewQComboBox(nil)
comboBoxSL.SetWindowTitle("Combo Box + String List Model")
comboBoxSL.SetModel(core.NewQStringListModel2(items, nil))
comboBoxSL.ConnectCurrentIndexChanged2(func(text string) {
println("Combo Box Index Changed To:", text)
})
addWidget(comboBoxSL)
//Font Combo Box
fontComboBox := widgets.NewQFontComboBox(nil)
fontComboBox.SetWindowTitle("Font Combo Box")
fontComboBox.ConnectCurrentFontChanged(func(font *gui.QFont) {
println("Font Combo Box Index Changed To:", font.ToString())
})
addWidget(fontComboBox)
//Line Edit
lineEdit := widgets.NewQLineEdit(nil)
lineEdit.SetWindowTitle("Line Edit")
lineEdit.ConnectTextChanged(func(text string) {
println("Line Edit Text Changed To:", text)
})
addWidget(lineEdit)
//Text Edit
textEdit := widgets.NewQTextEdit(nil)
textEdit.SetWindowTitle("Text Edit")
textEdit.ConnectTextChanged(func() {
println("Text Edit Text Changed To:", textEdit.ToPlainText())
})
addWidget(textEdit)
//Plain Text Edit
plainTextEdit := widgets.NewQPlainTextEdit(nil)
plainTextEdit.SetWindowTitle("Plain Text Edit")
plainTextEdit.ConnectTextChanged(func() {
println("Plain Text Edit Text Changed To:", plainTextEdit.ToPlainText())
})
addWidget(plainTextEdit)
//Spin Box
spinBox := widgets.NewQSpinBox(nil)
spinBox.SetWindowTitle("Spin Box")
spinBox.SetMinimum(0)
spinBox.SetMaximum(1000)
spinBox.SetValue(spinBox.Maximum() / 2)
spinBox.ConnectValueChanged(func(i int) {
println("Spin Box Value Changed To:", i)
})
addWidget(spinBox)
//Double Spin Box
doubleSpinBox := widgets.NewQDoubleSpinBox(nil)
doubleSpinBox.SetWindowTitle("Double Spin Box")
doubleSpinBox.SetMinimum(0)
doubleSpinBox.SetMaximum(1000)
doubleSpinBox.SetValue(doubleSpinBox.Maximum() / 2)
doubleSpinBox.ConnectValueChanged(func(d float64) {
println("Double Spin Box Value Changed To:", d)
})
addWidget(doubleSpinBox)
//Time Edit
timeEdit := widgets.NewQTimeEdit(nil)
timeEdit.SetWindowTitle("Time Edit")
timeEdit.SetTime(core.QTime_CurrentTime())
timeEdit.ConnectTimeChanged(func(time *core.QTime) {
println("Time Edit Time Changed To:", time.ToString2(core.Qt__TextDate))
})
addWidget(timeEdit)
//Date Edit
dateEdit := widgets.NewQDateEdit(nil)
dateEdit.SetWindowTitle("Date Edit")
dateEdit.SetDate(core.QDate_CurrentDate())
dateEdit.ConnectDateChanged(func(date *core.QDate) {
println("Date Edit Date Changed To:", date.ToString2(core.Qt__TextDate))
})
addWidget(dateEdit)
//Date/Time Edit
dateTimeEdit := widgets.NewQDateTimeEdit(nil)
dateTimeEdit.SetWindowTitle("Date Time Edit")
dateTimeEdit.SetDate(core.QDate_CurrentDate())
dateTimeEdit.SetTime(core.QTime_CurrentTime())
dateTimeEdit.ConnectDateTimeChanged(func(datetime *core.QDateTime) {
println("Date Time Edit Changed To:", datetime.ToString2(core.Qt__TextDate))
})
addWidget(dateTimeEdit)
//Dial
dial := widgets.NewQDial(nil)
dial.SetWindowTitle("Dial")
dial.SetMinimum(0)
dial.SetMaximum(1000)
dial.SetValue(dial.Maximum() / 2)
dial.ConnectValueChanged(func(value int) {
println("Dial Value Changed To:", value)
})
addWidget(dial)
//Horizontal Scroll Bar
hScrollBar := widgets.NewQScrollBar2(core.Qt__Horizontal, nil)
hScrollBar.SetWindowTitle("Horizontal Scroll Bar")
hScrollBar.SetMinimum(0)
hScrollBar.SetMaximum(1000)
hScrollBar.SetValue(hScrollBar.Maximum() / 2)
hScrollBar.ConnectValueChanged(func(value int) {
println("Horizontal Scroll Bar Value Changed To:", value)
})
addWidget(hScrollBar)
//Vertical Scroll Bar
vScrollBar := widgets.NewQScrollBar2(core.Qt__Vertical, nil)
vScrollBar.SetWindowTitle("Vertical Scroll Bar")
vScrollBar.SetMinimum(0)
vScrollBar.SetMaximum(1000)
vScrollBar.SetValue(vScrollBar.Maximum() / 2)
vScrollBar.ConnectValueChanged(func(value int) {
println("Vertical Scroll Bar Value Changed To:", value)
})
addWidget(vScrollBar)
//Horizontal Slider
hSlider := widgets.NewQSlider2(core.Qt__Horizontal, nil)
hSlider.SetWindowTitle("Horizontal Slider")
hSlider.SetMinimum(0)
hSlider.SetMaximum(1000)
hSlider.SetValue(hSlider.Maximum() / 2)
hSlider.ConnectValueChanged(func(value int) {
println("Horizontal Slider Value Changed To:", value)
})
addWidget(hSlider)
//Vertical Slider
vSlider := widgets.NewQSlider2(core.Qt__Vertical, nil)
vSlider.SetWindowTitle("Vertical Slider")
vSlider.SetMinimum(0)
vSlider.SetMaximum(1000)
vSlider.SetValue(vSlider.Maximum() / 2)
vSlider.ConnectValueChanged(func(value int) {
println("Vertical Slider Value Changed To:", value)
})
addWidget(vSlider)
//Key Sequence Edit
keySequenceEdit := widgets.NewQKeySequenceEdit(nil)
keySequenceEdit.SetWindowTitle("Key Sequence Edit")
keySequenceEdit.ConnectKeySequenceChanged(func(keySequence *gui.QKeySequence) {
println("Key Sequence Edit Key Sequence Changed To:", keySequence.ToString(gui.QKeySequence__NativeText))
})
addWidget(keySequenceEdit)
}

View file

@ -0,0 +1,98 @@
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
)
func itemViews() {
//List View
listView := widgets.NewQListView(nil)
listView.SetWindowTitle("List View")
list := []string{"This", "Is", "A", "List", "View"}
listModel := core.NewQAbstractListModel(nil)
listModel.ConnectRowCount(func(parent *core.QModelIndex) int {
return len(list)
})
listModel.ConnectData(func(index *core.QModelIndex, role int) *core.QVariant {
if role != int(core.Qt__DisplayRole) {
return core.NewQVariant()
}
return core.NewQVariant14(list[index.Row()])
})
listView.SetModel(listModel)
addWidget(listView)
//List View + String List Model
listViewS := widgets.NewQListView(nil)
listViewS.SetWindowTitle("List View + String List Model")
listViewS.SetModel(core.NewQStringListModel2(list, nil))
addWidget(listViewS)
//Tree View
treeView := widgets.NewQTreeView(nil)
treeView.SetWindowTitle("Tree View")
treeModel := gui.NewQStandardItemModel(nil)
rootNode := treeModel.InvisibleRootItem()
americaItem := gui.NewQStandardItem2("America")
mexicoItem := gui.NewQStandardItem2("Canada")
usaItem := gui.NewQStandardItem2("USA")
bostonItem := gui.NewQStandardItem2("Boston")
europeItem := gui.NewQStandardItem2("Europe")
italyItem := gui.NewQStandardItem2("Italy")
romeItem := gui.NewQStandardItem2("Rome")
veronaItem := gui.NewQStandardItem2("Verona")
rootNode.AppendRow2(americaItem)
rootNode.AppendRow2(europeItem)
americaItem.AppendRow2(mexicoItem)
americaItem.AppendRow2(usaItem)
usaItem.AppendRow2(bostonItem)
europeItem.AppendRow2(italyItem)
italyItem.AppendRow2(romeItem)
italyItem.AppendRow2(veronaItem)
treeView.SetModel(treeModel)
treeView.ExpandAll()
addWidget(treeView)
//Table View
tableView := widgets.NewQTableView(nil)
tableView.SetWindowTitle("Table View")
table := [][]string{
0: {"This", "Is", "The", "First", "Row"},
1: {"This", "Is", "The", "Second", "Row"},
2: {"This", "Is", "The", "Third", "Row"},
}
tableModel := core.NewQAbstractTableModel(nil)
tableModel.ConnectRowCount(func(parent *core.QModelIndex) int {
return len(table)
})
tableModel.ConnectColumnCount(func(parent *core.QModelIndex) int {
return len(table[0])
})
tableModel.ConnectData(func(index *core.QModelIndex, role int) *core.QVariant {
if role != int(core.Qt__DisplayRole) {
return core.NewQVariant()
}
return core.NewQVariant14(table[index.Row()][index.Column()])
})
tableView.SetModel(tableModel)
addWidget(tableView)
//Column View
columnView := widgets.NewQColumnView(nil)
columnView.SetWindowTitle("Column View")
columnView.SetModel(treeModel)
addWidget(columnView)
}

View file

@ -0,0 +1,65 @@
package main
import (
"github.com/therecipe/qt/widgets"
)
func itemWidgets() {
//List Widget
listWidget := widgets.NewQListWidget(nil)
listWidget.SetWindowTitle("List Widget")
list := []string{"This", "Is", "A", "List", "View"}
listWidget.AddItems(list)
addWidget(listWidget)
//Tree Widget
treeWidget := widgets.NewQTreeWidget(nil)
treeWidget.SetWindowTitle("Tree Widget")
rootNode := treeWidget.InvisibleRootItem()
americaItem := widgets.NewQTreeWidgetItem2([]string{"America"}, 0)
mexicoItem := widgets.NewQTreeWidgetItem2([]string{"Canada"}, 0)
usaItem := widgets.NewQTreeWidgetItem2([]string{"USA"}, 0)
bostonItem := widgets.NewQTreeWidgetItem2([]string{"Boston"}, 0)
europeItem := widgets.NewQTreeWidgetItem2([]string{"Europe"}, 0)
italyItem := widgets.NewQTreeWidgetItem2([]string{"Italy"}, 0)
romeItem := widgets.NewQTreeWidgetItem2([]string{"Rome"}, 0)
veronaItem := widgets.NewQTreeWidgetItem2([]string{"Verona"}, 0)
rootNode.AddChild(americaItem)
rootNode.AddChild(europeItem)
americaItem.AddChild(mexicoItem)
americaItem.AddChild(usaItem)
usaItem.AddChild(bostonItem)
europeItem.AddChild(italyItem)
italyItem.AddChild(romeItem)
italyItem.AddChild(veronaItem)
treeWidget.ExpandAll()
addWidget(treeWidget)
//Table Widget
tableWidget := widgets.NewQTableWidget(nil)
tableWidget.SetWindowTitle("Table Widget")
table := [][]string{
0: {"This", "Is", "The", "First", "Row"},
1: {"This", "Is", "The", "Second", "Row"},
2: {"This", "Is", "The", "Third", "Row"},
}
tableWidget.SetRowCount(len(table))
tableWidget.SetColumnCount(len(table[0]))
for row := 0; row < tableWidget.RowCount(); row++ {
for column := 0; column < tableWidget.ColumnCount(); column++ {
tableWidget.SetItem(row, column, widgets.NewQTableWidgetItem2(table[row][column], 0))
}
}
addWidget(tableWidget)
}

View file

@ -0,0 +1,54 @@
package main
import (
"fmt"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
func layouts() {
//Vertical Layout
vboxWidget := widgets.NewQWidget(nil, 0)
vboxWidget.SetWindowTitle("Vertical Layout")
vbox := widgets.NewQVBoxLayout2(vboxWidget)
vbox.AddWidget(widgets.NewQLabel2("one", nil, 0), 0, 0)
vbox.AddWidget(widgets.NewQLabel2("two", nil, 0), 0, 0)
vbox.AddWidget(widgets.NewQLabel2("three", nil, 0), 0, 0)
addWidget(vboxWidget)
//Horizontal Layout
hboxWidget := widgets.NewQWidget(nil, 0)
hboxWidget.SetWindowTitle("Horizontal Layout")
hbox := widgets.NewQHBoxLayout2(hboxWidget)
hbox.AddWidget(widgets.NewQLabel2("one", nil, 0), 0, 0)
hbox.AddWidget(widgets.NewQLabel2("two", nil, 0), 0, 0)
hbox.AddWidget(widgets.NewQLabel2("three", nil, 0), 0, 0)
addWidget(hboxWidget)
//Grid Layout
gridWidget := widgets.NewQWidget(nil, 0)
gridWidget.SetWindowTitle("Grid Layout")
grid := widgets.NewQGridLayout(gridWidget)
for row := 0; row < 4; row++ {
for column := 0; column < 4; column++ {
grid.AddWidget(widgets.NewQLabel2(fmt.Sprintf("[%v:%v]", row, column), nil, 0), row, column, core.Qt__AlignCenter)
}
}
addWidget(gridWidget)
//Form layout
formWidget := widgets.NewQWidget(nil, 0)
formWidget.SetWindowTitle("Form Layout")
form := widgets.NewQFormLayout(formWidget)
for row := 0; row < 3; row++ {
form.AddRow3(fmt.Sprintf("label %v", row), widgets.NewQLineEdit2(fmt.Sprintf("field %v", row), nil))
}
addWidget(formWidget)
}

View file

@ -0,0 +1,58 @@
package main
import (
"os"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
var (
centralLayout *widgets.QGridLayout
centralLayoutRow int
centralLayoutColumn int
)
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
mainWindow := widgets.NewQMainWindow(nil, 0)
mainWindow.SetWindowTitle("Common Widgets")
scrollWidget := widgets.NewQScrollArea(nil)
centralWidget := widgets.NewQWidget(nil, 0)
centralLayout = widgets.NewQGridLayout(centralWidget)
layouts()
buttons()
itemViews()
itemWidgets()
containers()
inputWidgets()
displayWidgets()
scrollWidget.SetWidget(centralWidget)
mainWindow.SetCentralWidget(scrollWidget)
mainWindow.ShowMaximized()
widgets.QApplication_Exec()
}
func addWidget(widget widgets.QWidget_ITF) {
if centralLayoutColumn > 6 {
centralLayoutColumn = 0
centralLayoutRow++
}
wrappedWidget := widgets.NewQGroupBox2(widget.QWidget_PTR().WindowTitle(), nil)
wrappedWidgetLayout := widgets.NewQVBoxLayout2(wrappedWidget)
wrappedWidgetLayout.AddWidget(widget, 0, core.Qt__AlignCenter)
wrappedWidget.SetFixedSize2(250, 250)
centralLayout.AddWidget(wrappedWidget, centralLayoutRow, centralLayoutColumn, core.Qt__AlignCenter)
centralLayoutColumn++
}

View file

@ -0,0 +1,7 @@
import QtQuick 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.4
Item {}
//this file is just here to inform qtdeploy about the needed QML dependencies

View file

@ -3,4 +3,4 @@ import QtQuick.Controls 2.0
Item {}
//This file is just here to inform qtdeploy about the needed QML dependencies
//this file is just here to inform qtdeploy about the needed QML dependencies

View file

@ -0,0 +1,40 @@
package main
import (
"fmt"
"os"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/qml"
"github.com/therecipe/qt/quick"
"github.com/therecipe/qt/widgets"
)
//this example demonstrates one possible way to deal with qml errors/warnings
//therefore the qml file does contain errors and will NOT work properly
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
view := quick.NewQQuickView(nil)
view.Engine().ConnectWarnings(func(warnings []*qml.QQmlError) {
for _, w := range warnings {
fmt.Println("warning:", w.ToString())
}
os.Exit(1)
})
view.SetResizeMode(quick.QQuickView__SizeViewToRootObject)
view.SetSource(core.NewQUrl3("qrc:///qml/view.qml", 0))
view.Show()
if errors := view.Errors(); len(errors) != 0 {
for _, e := range errors {
fmt.Println("error:", e.ToString())
}
os.Exit(1)
}
widgets.QApplication_Exec()
}

View file

@ -0,0 +1,9 @@
import QtQuick 2.0
Rectangle {
width: 300
height: 300
color: "green"
someError
}