QPushButton
基本用法就像前边Hello World示例中的那样,现在我们看看不基本的用法。
状态保持
QPushButton
有一个属性是checkable
,当设置为true
之后按钮就会点一下是按下,再点一下弹起来,如下图所示:
实现代码如下:
package main
import (
"os"
"github.com/therecipe/qt/widgets"
)
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
window := widgets.NewQDialog(nil, 0)
window.Resize2(300, 200)
gridLayout := widgets.NewQGridLayout(window)
label := widgets.NewQLabel2("你走了", window, 0)
button := widgets.NewQPushButton2("你过来啊", window)
button.SetCheckable(true)
button.ConnectClicked(func(s bool) {
if s {
label.SetText("你来了")
} else {
label.SetText("你走了")
}
})
gridLayout.AddWidget(label)
gridLayout.AddWidget(button)
window.Show()
widgets.QApplication_Exec()
}
弹出菜单
有的时候,逻辑上我们会希望一个按钮能够实现多种功能,此时可以结合弹出的菜单来实现。此时,需要涉及到另两个类(姑且这么叫吧)QMenu
和QAction
,我们可以利用QMenu
定义一个菜单,菜单中有若干个QAction
来负责实现具体的动作。
实现代码如下:
package main
import (
"os"
"github.com/therecipe/qt/widgets"
)
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
window := widgets.NewQDialog(nil, 0)
window.Resize2(300, 200)
gridLayout := widgets.NewQGridLayout(window)
label := widgets.NewQLabel2("你走了", window, 0)
button := widgets.NewQPushButton2("你过来啊", window)
menu := widgets.NewQMenu(window)
action := menu.AddAction("我怂了")
action.ConnectTriggered(func(s bool) {
label.SetText("哈哈哈")
})
button.SetMenu(menu)
gridLayout.AddWidget(label)
gridLayout.AddWidget(button)
window.Show()
widgets.QApplication_Exec()
}
QAction
也可以像按钮一样设置为checkable
,都是一样的,我就不废话了。
三态按钮
所谓三态,就是放置Play是一态,按下是一态,还有鼠标悬停是一态,通常是用来做一些颜色啊、形状啊之类的提示。此时需要qss登场了。
增加如下代码:
window.SetStyleSheet(`
QPushButton:hover{
background-color: red;
border-radius: 10px
}
`)