Comments (2)
It seems like the go build
tool and therefore qtdeploy
will ignore all .mm
files (.m
files work through)
So, you probably have to place your c++ functions inside some .cpp files and make them available to go/obj-c with extern "C"
, if you want to have it auto compiled with go build
/qtdeploy
But, I'm not sure and there might be some way that I don't know.
(Maybe ask in golang-nuts, /r/golang ?)
from qt.
Okay, I got it working.
You need to compile the .mm
file separately and create a static lib, so that you can link it against go.
Just run go generate && go build
main.go
package main
/*
#cgo LDFLAGS: -framework Foundation -L. -l main
#include "main.h"
*/
import "C"
import (
"os"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
//go:generate qtmoc
type GoObject struct {
core.QObject
_ func() `slot:sayHello`
}
//go:generate clang++ -pipe -O2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_NO_DEBUG -DQT_CORE_LIB -I/usr/local/Qt5.5.1/5.5/clang_64/mkspecs/macx-clang -F/usr/local/Qt5.5.1/5.5/clang_64/lib -I/usr/local/Qt5.5.1/5.5/clang_64/lib/QtCore.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/AGL.framework/Headers -c -o ./libmain.o ./main.mm
//go:generate ar crv ./libmain.a ./libmain.o
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
var goObject = NewGoObject(nil)
goObject.ConnectSayHello(func() { println("Hello from Go") })
var button = widgets.NewQPushButton2("sayHello", nil)
button.ConnectClicked(func(_ bool) { C.sayHelloWrapper(goObject.Pointer()) })
var layout = widgets.NewQVBoxLayout()
layout.AddWidget(button, 0, 0)
var window = widgets.NewQMainWindow(nil, 0)
window.Layout().DestroyQObject()
window.SetLayout(layout)
window.Show()
widgets.QApplication_Exec()
}
main.h
#pragma once
#ifndef GO_OBJC_H
#define GO_OBJC_H
#ifdef __cplusplus
extern "C" {
#endif
void sayHelloWrapper(void* ptr);
#ifdef __cplusplus
}
#endif
#endif
main.mm
#include "main.h"
#include "moc.h"
#import <Foundation/Foundation.h>
#include <QDebug>
void sayHelloWrapper(void* ptr){
NSLog(@"Hello from Objective-C");
GoObject_SayHello(ptr);
qDebug() << "Hello from C++";
}
from qt.
Related Issues (20)
- 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
- gui.NewQPixmap3() have a requestion?
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.