Code Monkey home page Code Monkey logo

dotherside's Introduction

DOtherSide

License CI codecov Documentation Status

C language library for creating bindings for the Qt QML language.

Documentation: https://filcuc.github.io/dotherside/

Currently the DOtherSide library is used by the following bindings:

  • nimqml, QML bindings for the Nim programming language
  • qml_zig, QML bindings for the Zig programming language

It was historically used by:

  • dqml, QML bindings for the D programming language
  • qml-rust, QML bindings for the Rust programming language

Supported features

The following features are implementable from a binding language

  • Creation of custom QObject
  • Creation of custom QAbstractItemModels (Lists, Tables and Trees)
  • Creation of custom properties, signals and slots
  • Creation of QObjects from QML
  • Registration of singletons in QML
  • Creation of custom image providers

Prebuilt binaries

Currently we provide the prebuilt binaries for Windows through the GitHub releases page or directly as artifacts from Github actions

Change log

The project change log can be read here.

Supported platforms

Currently we support the following platforms/compilers:

  • Linux both 32/64bit with gcc
  • Windows 32/64bit with Visual Studio 2013|2015 Community Edition

Build requirements

You need the following software:

  • Qt 5.12 or higher or Qt 6.2 or higher
  • Linux: gcc 4.8 or later with c++11 support or higher
  • Windows: Visual Studio 2013|2015 Community Edition (Windows) or higher

Qt5 and Qt6 Notes

We support both Qt5 and Qt6 builds but we don't support coesisteance of the DOtherSide library compiled in both ways. In other words the DOtherSide so name is the same compiled with Qt5 or Qt6. This is a current limitation but we could change this in future.

Build instructions:

cd /path/to/cloned/repo
mkdir build
cd build
cmake ..
cmake --build .

Install Instructions

Once you built the package just type

make install

by default cmake will install to the default CMAKE prefix. If you want to customize this location type the following command during the build steps when invoking cmake

cmake -DCMAKE_INSTALL_PREFIX:PATH=/path/to/install/prefix path/to/CMakeLists.txt

dotherside's People

Contributors

arnetheduck avatar bamarc avatar bryant1410 avatar cireu avatar drug007 avatar dunkyp avatar filcuc avatar flanfly avatar kassane avatar markus-oberhumer avatar sfietkonstantin avatar shalokshalom avatar zxey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dotherside's Issues

Help with bindings at qml_register_type (create callback)

The original post is here, but the problem was in other place, see second post below...

gdb output

Thread 1 "qmlregister" received signal SIGSEGV, Segmentation fault.
__cxxabiv1::__dynamic_cast (src_ptr=0x7fffedeb3f40, 
   src_type=0x7ffff5ed3690 <typeinfo for QObject>,
   dst_type=0x55555596cd58 <typeinfo for DOS::DosQObject>, src2dst=0) 
   at /build/gcc-multilib/src/gcc/libstdc++-v3/libsupc++/dyncast.cc:72
72      /build/gcc-multilib/src/gcc/libstdc++-v3/libsupc++/dyncast.cc: No such file or directory.

As far as I can understand that's coming from

m_impl = dynamic_cast<DosQObject *>(static_cast<QObject *>(impl));

So this impl is bindedQObject from typedef void( * CreateDObject) (int id, void *wrapper, void **dosQObject, void **bindedQObject).

I'm storing in this bindedQObject the same pointer I'm passing to dos_qobject_create() as a first argument (dObjectPointer):

Pointer passed to dos_qobject_create() is: 0x7fffedeb3f40
Pointer stored in bindedQObject object is: 0x7fffedeb3f40

Am I doing something wrong? :(

Signal signature check

During the emit of a signal we don't check its signature.
This could cause bugs if the user defined multiple signal with the same name ie,
nameChanged()
nameChanged(const QString)

At the moment we simply take the first one

Seems to work on OSX

Running on OSX with Qt v5.6.1 (downloaded directly from qt.io) seems to compile fine.

cmake:

$ cmake ..
-- The C compiler identification is AppleClang 7.3.0.7030031
-- The CXX compiler identification is AppleClang 7.3.0.7030031
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: ~/tmp/DOtherSide/build

make (too long to paste)

Tests (not sure if they are all there):

$ ./test/TestDynamicQObject
********* Start testing of TestQGuiApplication *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQGuiApplication::initTestCase()
PASS   : TestQGuiApplication::testExecution()
PASS   : TestQGuiApplication::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQGuiApplication *********
********* Start testing of TestQApplication *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQApplication::initTestCase()
PASS   : TestQApplication::testExecution()
PASS   : TestQApplication::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQApplication *********
********* Start testing of TestQVariant *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQVariant::initTestCase()
PASS   : TestQVariant::testCreate()
PASS   : TestQVariant::testInt()
PASS   : TestQVariant::testBool()
PASS   : TestQVariant::testFloat()
PASS   : TestQVariant::testDouble()
PASS   : TestQVariant::testString()
PASS   : TestQVariant::testQObject()
PASS   : TestQVariant::testArray()
PASS   : TestQVariant::cleanupTestCase()
Totals: 10 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQVariant *********
********* Start testing of TestQUrl *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQUrl::initTestCase()
PASS   : TestQUrl::testCreate()
PASS   : TestQUrl::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQUrl *********
********* Start testing of TestQModelIndex *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQModelIndex::initTestCase()
PASS   : TestQModelIndex::testCreate()
PASS   : TestQModelIndex::testRow()
PASS   : TestQModelIndex::testColumn()
PASS   : TestQModelIndex::testParent()
PASS   : TestQModelIndex::testChild()
PASS   : TestQModelIndex::testSibling()
PASS   : TestQModelIndex::testData()
PASS   : TestQModelIndex::cleanupTestCase()
Totals: 9 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQModelIndex *********
********* Start testing of TestQQmlApplicationEngine *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQQmlApplicationEngine::initTestCase()
PASS   : TestQQmlApplicationEngine::testCreateAndDelete()
PASS   : TestQQmlApplicationEngine::testLoadUrl()
PASS   : TestQQmlApplicationEngine::testLoadData()
PASS   : TestQQmlApplicationEngine::cleanupTestCase()
Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQQmlApplicationEngine *********
********* Start testing of TestQQmlContext *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQQmlContext::initTestCase()
PASS   : TestQQmlContext::testCreateAndDelete()
PASS   : TestQQmlContext::testSetContextProperty()
PASS   : TestQQmlContext::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQQmlContext *********
********* Start testing of TestQObject *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQObject::initTestCase()
PASS   : TestQObject::testObjectName()
PASS   : TestQObject::testPropertyReadAndWrite()
PASS   : TestQObject::testSignalEmittion()
PASS   : TestQObject::testArrayProperty()
PASS   : TestQObject::cleanupTestCase()
Totals: 6 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQObject *********
********* Start testing of TestQAbstractListModel *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQAbstractListModel::initTestCase()
PASS   : TestQAbstractListModel::testObjectName()
PASS   : TestQAbstractListModel::testPropertyReadAndWrite()
PASS   : TestQAbstractListModel::testSignalEmittion()
PASS   : TestQAbstractListModel::testRowCount()
PASS   : TestQAbstractListModel::testColumnCount()
PASS   : TestQAbstractListModel::testData()
PASS   : TestQAbstractListModel::testSetData()
PASS   : TestQAbstractListModel::cleanupTestCase()
Totals: 9 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQAbstractListModel *********
********* Start testing of TestQDeclarativeIntegration *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQDeclarativeIntegration::initTestCase()
PASS   : TestQDeclarativeIntegration::testQmlRegisterType()
PASS   : TestQDeclarativeIntegration::testQmlRegisterSingletonType()
PASS   : TestQDeclarativeIntegration::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQDeclarativeIntegration *********
********* Start testing of TestQQuickView *********
Config: Using QtTest library 5.6.1, Qt 5.6.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 7.0.2 (clang-700.1.81) (Apple))
PASS   : TestQQuickView::initTestCase()
PASS   : TestQQuickView::testCreate()
PASS   : TestQQuickView::testSourceAndSetSource()
PASS   : TestQQuickView::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestQQuickView *********

No response after app startup

I have compiled the library and samples from sources. Compilation is ok.
When I start an app from shell I have no response at all. I modified *.nim sources (HelloWorld) to see where is problem, for example:

import NimQml
import macros
import typeinfo

proc mainProc() =
  echo "in main"
  echo "in main 7"
  var app: QApplication
  app.create()
  echo "app new"

In output I have only

in main
in main 7

I something missed?

// FreeBSD 10.1, clang 3.4.1, Nim Compiler Version 0.11.3 (2015-06-29) [FreeBSD: amd64]

Some quick documentation on how to bind new objects

I'm trying to bind a few new objects and it's not super clear what the conventions are and where everything should go. In particular a description of where the C wrappers go and the mechanics of writing the vtables and such would be really helpful.

C examples needed

To help facilitate bindings for other languages it would be really helpful to have some c examples that illustrate some of the basic functionality supported by this library. I attempted to create a simple hello world application (https://doc.qt.io/qt-5/qml-tutorial1.html) following your nim example (https://github.com/filcuc/nimqml/blob/3320d7071188c587079e38fd0bb89e938969f044/examples/helloworld/main.nim), but I don't get the window displayed during the exec call.

I can send a pull request with what I have so far if that would be easier to discuss. Thanks in advance for any tips.

Note: compiled and run with gcc 6.1.1 on Arch linux. The qml operates ok when run through qmlscene.

//main.c

include "DOtherSide/DOtherSide.h"

static const char *app =
"import QtQuick 2.0\n"
"\n"
"Rectangle {\n"
" id: page\n"
" width: 320; height: 480\n"
" color: "lightgray"\n"
"\n"
" Text {\n"
" id: helloText\n"
" text: "Hello world!"\n"
" y: 30\n"
" anchors.horizontalCenter: page.horizontalCenter\n"
" font.pointSize: 24; font.bold: true\n"
" }\n"
"}";

int main(int argc, char* argv[])
{
dos_qapplication_create();
DosQQmlApplicationEngine *engine = dos_qqmlapplicationengine_create();
dos_qqmlapplicationengine_load_data(engine, app);

dos_qapplication_exec();

dos_qqmlapplicationengine_delete(engine);
dos_qapplication_delete();

return 0;
}

//Makefile
all: hello

hello: main.c
gcc -Wall -Werror -I ../../lib/include -L../../build/lib -lDOtherSide main.c -o hello

clean:
rm -rf hello

run: hello
LD_LIBRARY_PATH=../../build/lib ./hello

Arrays as QVariants

I'm developing QML bindings for Rust based on your DOtherSide bindings, and I've found that providing arrays to QML in properties is not available.

Qt docs mention creation of QVariant from QList<QVariant>, QMap<QString, QVariant> and QHash<QString, QVariant>. Two latter objects probably wouldn't be used very often, but the first one seems rather important to me, being a support for array types.

Example QML code involving arrays

    PercentBarSeries {
        axisX: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }

compile error

dotherside/lib/src/DOtherSide.cpp:1067:44: error: unused parameter ‘style’ [-Werror=unused-parameter]

fix this with this change
void dos_qquickstyle_set_style([[maybe_unused]] const char *style)

void dos_qquickstyle_set_fallback_style([[maybe_unused]]const char *style)

RFC: rootObject is unsafe

This is due to returning references to temporary objects to the binded language. This is totaly usafe because the QObject wrappers in the binded language don't have the ownership of the QObject pointers returned by this function.
To solve this we have different solutions:

  1. Remove this API function
  2. Provide a semantic for unowned QObject in the binded language

Solution (2) is very cumbersome to implement basically we should keep QPointer somewhere in order to track the deletion of the QObjects. Furthermore this is safe only if everything works in the UI Thread.

PreBuilded DOtherSide.dll files invisible for the program

I've tried to build DOtherSide.dll primarily, but cmake did not accept MinGW compillers, and said:
"C compliler (gcc.exe) can't even compile a test", then I've tried to build using mason and ninja, and it got me a list of errors in code.
Then I've downloaded prebuilded DOtherSide.dll, but the program does not see it, i think it happened because the program compiled using MinGW, but this DOtherSide using MSVC, I don't wanna use MSVC to compile my programm, and i FUCK MICROSOFT VISUAL STUDIO

insufficient headers installed by CMake?

CMake only installs 2 headers: "DOtherSide.h" and "DOtherSideTypes.h", but "test/test_dotherside.cpp" uses 3 more:

#include <DOtherSide/DosQObject.h>
#include <DOtherSide/DosQMetaObject.h>
#include <DOtherSide/DosQObject.h>
#include <DOtherSide/DosQAbstractItemModel.h>

so it couldn't be compiled just with the installed headers.

Even more are available in "lib/include/DOtherSide". Shouldn't they all be installed?

Question about using Q_OBJECT with DOtherside

Hi there, @filcuc.
Is it possible to use QT MOC within DOtherside? I was trying to follow the solution to this question: https://stackoverflow.com/a/40313601, and after attempting to implement the same inside DOtherSide.cpp, while building the project I ended up with the following error:

AutoMoc error
-------------
"SRC:/lib/src/DOtherSide.cpp"
contains a "Q_OBJECT" macro, but does not include "DOtherSide.moc"!
Consider to
  - add #include "DOtherSide.moc"
  - enable SKIP_AUTOMOC for this file

make[3]: *** [lib/CMakeFiles/DOtherSideStatic_autogen.dir/build.make:77: lib/CMakeFiles/DOtherSideStatic_autogen] Error 1
make[3]: Leaving directory '/home/richard/status/nim-status-client/vendor/DOtherSide/build'
make[2]: *** [CMakeFiles/Makefile2:141: lib/CMakeFiles/DOtherSideStatic_autogen.dir/all] Error 2
make[2]: Leaving directory '/home/richard/status/nim-status-client/vendor/DOtherSide/build'
make[1]: *** [Makefile:149: all] Error 2

Split the the library in multiple sub libraries

This would allow us to add bindings for not "core" functions (like functions for QWebEngine) without requiring an hard dependency to QWebEngine to all the libraries.
Furthermore this gives more flexibility to bindings authors.

add support for QQuickImageProvider

Currently there's no possibility to dynamically add and display images, correct? This is quite a common requirement I think, let's say I want to build an image gallery application which loads images from a database.

I saw there was an idea once to make a GSoC project out of this. I guess it didn't happen. I'm writing this because I'd like to know if someone else currently is interested in this and wants to collaborate. My goal would be to add dynamic image loading to qml-rust.

An additional components support

Hi. What qt-packages includes in this library? Is it possible to use an additional components like a Qt5Charts, Qt5QuickControls2, etc.?

DUB support

DOtherSide can be separated into

  1. C library (cmake + make) with C/C++ tests (cmake + make)
  2. Nimrod package (nimble) with tests (?)
  3. D package (dub) with tests (using overload of dub test)

cmake fails to compile DMD test on OS X

CMake Error at D/cmake/D/CMakeTestDCompiler.cmake:45 (message):
  The D compiler "/usr/bin/dmd" is not able to compile a simple test program.

  It fails with the following output:

   Change Dir: /Users/ilya/GitHub/DOtherSide/build/CMakeFiles/CMakeTmp



  Run Build Command:"/usr/bin/make" "cmTryCompileExec1153283130/fast"

  /Applications/Xcode.app/Contents/Developer/usr/bin/make -f
  CMakeFiles/cmTryCompileExec1153283130.dir/build.make
  CMakeFiles/cmTryCompileExec1153283130.dir/build

  /usr/local/Cellar/cmake/3.0.2/bin/cmake -E cmake_progress_report
  /Users/ilya/GitHub/DOtherSide/build/CMakeFiles/CMakeTmp/CMakeFiles 1

  Building D object CMakeFiles/cmTryCompileExec1153283130.dir/testDCompiler

  /usr/bin/dmd CMakeFiles/cmTryCompileExec1153283130.dir/testDCompiler -c
  /Users/ilya/GitHub/DOtherSide/build/CMakeFiles/3.0.2/CMakeTmp/testDCompiler.d


  Error: cannot read file
  CMakeFiles/cmTryCompileExec1153283130.dir/testDCompiler.d

  make[1]: *** [CMakeFiles/cmTryCompileExec1153283130.dir/testDCompiler]
  Error 1

  make: *** [cmTryCompileExec1153283130/fast] Error 2





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  D/DQml/CMakeLists.txt:2 (project)

Missing binding of the QAIM::index() and QAIM::createIndex functions

It's more of a call of help, then an issue:

dataChanged has, among others, two parameters topLeft, bottomRight which are DosQModelIndex. The question is -- how do I get these indexes? By calling dos_qmodelindex_create and then dos_qmodelindex_sibling? I suppose they won't be valid as they are not connected to the model?

Or maybe, there should be a binding for http://doc.qt.io/qt-5/qabstractitemmodel.html#index or http://doc.qt.io/qt-5/qabstractitemmodel.html#createIndex?

WebView in QML

Original issue: White-Oak/qml-rust#9

As far as I can see, to use WebView in QML one should call QtWebView::initialize(); after creating QApplication.

So the goal is to provide a function to call that one. The problem is -- dependencies. AFAIK, DOtherSide would require QtWebView in system to provide this function, but probably not everyone would have it (embedded devices are an example). Is it possible to hide that feature behind some compilation flag? Say, make DOtherSide --qtwebview.

Add support for QQuickItem

it would be cool to being able to create QQuickItem instances from a binded language.
This woud allow custom QQuickItems. For sure this is going to be a big task

Ability to use registered signal attributes from QML code

The original issue is White-Oak/qml-rust#8.

So the problem is :

  • onPageDownloaded is a signal fn pageDownloaded(response: String)
  • onPageDownloaded: console.log("Page Downloaded "+ response); fails with an error ReferenceError: response is not defined, because attributes' names are not used on registration.

I see three solutions to the original problem:

  1. Use arguments:
onPageDownloaded: console.log("Page downloaded " + arguments[0]);

Remember, that in JS you can always check what are the arguments of the function (see this answer on SO)
2. Connect signal to function in qml like this

  Component.onCompleted: {
    visible = true;
    logic.pageDownloaded.connect(jsPageDownloaded);
  }

  function jsPageDownloaded(response) {
    console.log("Page downloaded " + response);
  }
  // ...

This is more verbose.
3. Provide an ability to register attribute name on registration.
Currently SignalDefinition consists of signal's name, number of attributes and their types. Is it possible to provide names of attributes as well?

Q_DECLARE_METATYPE analog

This macro is used to add supporting for custom type to QVariant. Is there a way to use it from binded language? That is define a CustomType in binded language and in some way register it in the Qt type system?

Multithreading with DOtherSide

I tried to write some multithreading code, that involves calling bindings' methods and figured Qt doesn't really expect me to use multithreaded code :)

So, libqmlbind has something like qmlbind_next_tick to put callback to an event queue, at least something like this would be really cool, because as one thread is blocked in QmlEngine::exec(), any work has to be done in other threads.

DOtherSideTypes.h does not compile if included in .c

in C structs need to have a typedef to be useable.

For example this struct:

struct PropertyDefinitions {
   ...
};

is only usable like this: struct PropertyDefinitions myStruct;
and not like this: PropertyDefinitions myStruct;

through non the the references in the .h file are prefixed by struct this results in typeerrors if it is included in .c files.

to fix this issue either append a typedef after every struct declaration:

struct PropertyDefinitions {
   ...
};
typedef struct PropertyDefinitions PropertyDefinitions;

or combine the typedef with the struct definition:

typedef  struct {
   ...
} PropertyDefinitions;

Does not compile with a C compiler

As the title says. This fails to compile with a C compiler. First, the typedefs for the enums are missing. Then, I am not too versed in C itself, but it seems it is not possible to set default values for function parameters.

Help me insert slots and signals into QtE5.

Hello, Filippo.
I need your assistance. I make a Qt binding for dlang (https://github.com/MGWL/QtE5).
I really like your variant of the implementation of dynamic signals and slots to Qt and I want to incorporate it into QtE5. I find it very difficult to understand how this is implemented and I want to ask you to explain it to me. If you help me insert dynamic slots and signals into QtE5, I will be very grateful to you!

Add OSX Travis configuration

As pointed out in #42 DOtherSide build just fine on OSX. We should updated the .travis file for adding a new OSX configuration.

Documentation

Is there any documentation about how to use this lib?

DOtherSide.lib

Could you provide ready to use DOtherSide.lib lib for Windows?

How to set non-default path to Qt?

Hi. I've installed qt 5.10.1 with qt-creator into path /home/username/Qt via online-installator qt-unified-linux-x64-3.0.2-online.run

Is it possible to make this library and define path to my current Qt's dir?

/home/username/Qt/5.10.1/gcc_64 $ ls
bin  doc  include  lib  libexec  mkspecs  phrasebooks  plugins  qml  resources  translations

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.