拖拽简介
在这部分Qt5教程中,我们将讨论拖拽相关操作。
在计算机图形用户界面中,拖放的操作(或支持的作用)点击虚拟对象和拖动到另一个位置或到另一个虚拟对象。一般来说,它可以用于调用多种行动,或创建各种类型的两个抽象对象之间的关联。
拖放是图形用户界面的一部分。拖拽操作让用户直观地做复杂的事情。
通常,我们可以拖放两件事:数据或一些图形对象。
如果我们把一个图像从一个应用程序到另一个地方,我们拖拽二进制数据。
如果我们把一个标签在Firefox中并将其移动到另一个地方,我们拖拽一个图形组件。
案例说明
-
在之前示例中,我们有一个QLineEdit QPushButton。
-
我们拖着纯文本的行编辑窗口小部件,然后放到按钮部件。按钮的标签会改变。
-
这个列子演示了一个简单的拖拽操作
demo.go
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
"os"
)
/*
在之前示例中,我们有一个QLineEdit QPushButton。
我们拖着纯文本的行编辑窗口小部件,然后放到按钮部件。按钮的标签会改变。
这个列子演示了一个简单的拖拽操作
*/
func InitUi() *widgets.QMainWindow {
// 创建窗口
app := widgets.NewQMainWindow(nil, 0)
// 设置窗口的标题
app.SetWindowTitle("Qt 教程")
// 设置窗口的位置和大小
app.SetGeometry2(300, 300, 300, 220)
// 设置窗口的图标,引用当前目录下的web.png图片
app.SetWindowIcon(gui.NewQIcon5("images/app.ico"))
// 布局窗口组件载体
widget := widgets.NewQWidget(app, core.Qt__Widget)
//widget.SetGeometry(core.NewQRect4(300, 300, 300, 220))
widget.SetGeometry2(0, 0, 300, 220)
app.SetCentralWidget(widget)
//QLineEdit内置了对drag(拖动)操作的支持。
edit := widgets.NewQLineEdit(widget)
// 打开拖放
edit.SetDragEnabled(true)
edit.Move2(30, 65)
// 我们需要重新实现某些方法才能使QPushButton接受拖放操作。
button := widgets.NewQPushButton2("Button", widget)
button.Move2(190, 65)
// 使该控件接受drop(放下)事件。
button.SetAcceptDrops(true)
button.ConnectDragEnterEvent(dragEnterEvent)
// 通过重新实现dropEvent()方法,我们定义了在drop事件发生时的行为。
//这里我们改变了按钮的文字。
button.ConnectDropEvent(func(event *gui.QDropEvent) {
button.SetText(event.MimeData().Text())
})
return app
}
// 首先我们重新实现了dragEnterEvent()方法,并设置可接受的数据类型(在这里是普通文本)。
func dragEnterEvent(event *gui.QDragEnterEvent) {
if event.MimeData().HasFormat("text/plain"){
event.AcceptProposedAction()
}
}
func main() {
// 创建一个应用程序对象
// sys.argv参数是一个列表,从命令行输入参数
widgets.NewQApplication(len(os.Args), os.Args)
// 初始化窗口
app := InitUi()
// 显示组件
app.Show()
// 确保应用程序干净的退出
widgets.QApplication_Exec()
}