Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Packages

Packaging status

Introduction

QSchematic is a library to draw diagrams & schematics with Qt. It uses Qt's graphics view framework.

The library provides base classes for objects such as nodes and wires and implements logic to move objects around while keeping the wires connected, generating netlists and so on. A typical application would include this library and subclass the Item class to implement custom items.

Feature overview:

  • Add, remove, move, resize, rotate nodes
  • Connect nodes with wires
  • Command stack for undo/redo
  • Drag'n'Drop
  • Netlist generator
    • In-memory template generator
    • JSON writer
    • Custom writers
  • Serialization to/from XML or YAML
  • Completely customizable by inheriting from the provided classes
  • Items
    • All items support "highlighted" and an optional pop-up widget on hover
    • Nodes
    • Wires
      • Straight
      • Square
      • Bezier
    • Connectors
    • Widgets (embed any QWidget into the scene)

Technical stuff:

  • Written in C++23
  • Works with Qt6
  • Everything is contained within the QSchematic namespace
  • MIT licensed

Licensing

This library is MIT licensed.

Credits

This library was originally designed, implemented and maintained by Joel Bodenmann in 2015. It was handed over to Simulton GmbH in late 2018.

Special thank goes to Professor François Corthay (Switzerland) for initially privately funding this project.

Screenshots

The library allows complete customization of every visual aspect. Therefore, screenshots are not really a telling thing as they are just showing an application specific implementation of the paint functions. But meh... I guess people still want to see some stuff so here we go: Screenshot 06Screenshot 04Screenshot 05Screenshot 07

For more, check out the docs/screenshots folder.

Instructions

This is built using cmake.

Building

The following targets are provided:

TargetDescription
qschematic-staticBuilds a static library.
qschematic-sharedBuilds a shared/dynamic library.
qschematic-demoBuilds a simple demo application.

Dependencies:

  • A C++23 capable compiler
  • Qt6
  • GPDS for (de)serialization

If the cmake option QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD is enabled (default), cmake will automatically pull the GPDS dependency. Therefore, assuming a system with a working Qt6 installation, all you have to do is:

git clone https://github.com/simulton/qschematic
cd qschematic
cmake -B build
cmake --build build

Integration

CMake

This library can be integrated easily into other cmake projects. There are two main mechanisms available:

  • Using FetchContent_Declare()
  • Install the library and use find_package()

fetchContent_Declare()

include(FetchContent)
# Set QSchematic CMake optionsset(QSCHEMATIC_BUILD_DEMO OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_DOWNLOAD OFFCACHEINTERNAL"")
set(QSCHEMATIC_DEPENDENCY_GPDS_TARGET "gpds-shared"CACHEINTERNAL"")
# Fetch QSchematicFetchContent_Declare(
qschematic
GIT_REPOSITORY https://github.com/simulton/qschematic
GIT_TAG master
)
FetchContent_MakeAvailable(qschematic)
# Link to your application/librarytarget_link_libraries(
my_appPRIVATEqschematic::qschematic-static
)

Note that any serious consumer might want to specify an actual git tag or a commit hash via GIT_TAG rather than a branch name.

find_package()

The QSchematic static & shared library cmake targets are exported which allows for easy integration into a client application/library. After successfully building & installing the QSchematic library targets, use find_package() to include the QSchematic targets and target_link_libraries() to add the corresponding target to your client application/library:

find_package(QSchematic REQUIRED)
add_executable(my_application "")
target_link_libraries(my_application qschematic::qschematic-static)

Other build systems

Use the cmake scripts that ship with this library to build either the static library (cmake target qschematic-static) or the shared library (cmake target qschematic-shared) and link the resulting library into your client application/library using whatever mechanism the build system of your choosing provides.

Architecture

Did someone say UML?!

The class diagramm below shows the overall architecture of the system: System

All items that are part of the Scene inherit from the Item class. There are built-in specialized classes for nodes, wires and so on: Items

About

A library that allows creating diagrams such as flowcharts or even proper engineering schematics within a Qt application.

Resources

Stars

336 stars

Watchers

23 watching

Forks

Releases

Packages

Used by

Contributors

Languages