Comments (3)
Hey
It seems like accessing scene.Width() or scene.Height() in line.boundingRect() causes a infinite recursion and crashes the program. (The scene probably checks all added objects to determine its own size)
But you could use the QGraphicsView size (which is different from the QGraphicsScene size).
The scene.RemoveItem function should work, just click inside the scene and the line should disappear.
package main
import (
"os"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
)
var (
canvas *widgets.QWidget
scene *widgets.QGraphicsScene
view *widgets.QGraphicsView
)
type line struct{ *widgets.QGraphicsPathItem }
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
NewCanvas().Show()
widgets.QApplication_Exec()
}
func NewCanvas() *widgets.QWidget {
canvas = widgets.NewQWidget(nil, 0)
scene = widgets.NewQGraphicsScene(nil)
view = widgets.NewQGraphicsView(nil)
var l = &line{QGraphicsPathItem: widgets.NewQGraphicsPathItem(nil)}
l.ConnectBoundingRect(l.boundingRect)
l.ConnectPaint(l.paint)
scene.AddItem(l)
//test scene.RemoveItem
scene.ConnectMousePressEvent(func(e *widgets.QGraphicsSceneMouseEvent) { scene.RemoveItem(l) })
view.SetScene(scene)
var layout = widgets.NewQVBoxLayout()
layout.AddWidget(view, 0, 0)
canvas.SetLayout(layout)
return canvas
}
func (l *line) paint(p *gui.QPainter, o *widgets.QStyleOptionGraphicsItem, w *widgets.QWidget) {
var color = gui.NewQColor3(0, 0, 0, 255)
var brush = gui.NewQBrush3(color, 0) // solid = 1, nobrush = 0
var pen = gui.NewQPen3(color)
pen.SetWidth(1)
p.SetRenderHint(1, true) // Antiailiasing
p.SetPen(pen)
p.SetBrush(brush)
path := gui.NewQPainterPath()
sx, sy, tx, ty := 0.0, 0.0, scene.Width(), scene.Height()/2
path.MoveTo2(sx, sy)
path.LineTo2(tx, ty)
p.DrawPath(path)
}
func (l *line) boundingRect() *core.QRectF {
/*
//accessing scene.Width() and scene.Height() here causes infinite recursion
println("called boundingRect")
return core.NewQRectF4(0.0, 0.0, scene.Width(), scene.Height()/2)
*/
return core.NewQRectF4(0.0, 0.0, float64(view.Width()), float64(view.Height())/2)
}
from qt.
Thanks. Confirmed my error.
Btw, I am having a difficult time keeping the canvas updated. I use these two methods:
c.View.Viewport().Repaint()
and
c.Scene.Update(c.Scene.SceneRect())
Neither seem to be working like I want. When I draw lines and remove them sometimes they stay on the scene until I draw several more lines and they eventually disappear. Sometimes when I erase a box on the canvas a line underneath the box will not redraw itself unless I zoom in and out.
from qt.
QGraphicsItem.PrepareGeometryChange() AND View.Viewport().Repaint() getting me most of the way there :/
from qt.
Related Issues (20)
- Hello! I have a problem
- deploying linux to windows build fail with newqwebengineview. thanks for your help HOT 4
- Is alive? HOT 1
- Issue with using *QFileDialog.SelectedFiles(), "interface conversion: interface {} is []interface {}, not []string" HOT 1
- /usr/bin/ld: i386 architecture of input file `/tmp/go-link-3590783856/000000.o' is incompatible with i386:x86-64 output HOT 2
- Is there an active fork of this project? HOT 8
- android APK crashes when launched
- Installation fails for Qt 6 HOT 2
- !!! Read before opening a new issue !!!
- qtdeploy may not work with Go1.20 HOT 1
- go: warning: "github.com/therecipe/qt/cmd/..." matched no packages HOT 1
- menu.Actions() panics
- How to add a property sheet file to Qt
- How can I deploy a program to an arm development board and don't see a good way
- Intermittent Qtdeploy Failures HOT 1
- Gave up - Docs need some work for new people HOT 1
- is this project still maintains, what's the latest qt version does it support HOT 2
- qtsetup fails
- qtsetup error in freebsd 14.1 HOT 1
- New and working linux_static deployment dockerfile
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from qt.