GithubHelp home page GithubHelp logo

przemek83 / volbx Goto Github PK

View Code? Open in Web Editor NEW
231.0 9.0 23.0 4.54 MB

Graphical tool for data manipulation written in C++/Qt.

License: GNU Lesser General Public License v3.0

C++ 91.94% C 0.42% CSS 4.52% CMake 3.12%
qt c-plus-plus statistical-analysis data-visualization data-analysis data xlsx data-manipulation plots graphical

volbx's Introduction

Table of content

Example view

Description

Volbx is a graphical tool used for data manipulation written in C++/Qt. User can:

  • load data - opens XLSX and ODS spreadsheet files,
  • filter data - filters panel can be used to define data range on each column,
  • select data - user can select rows on main data table,
  • visualize data - multiple types of built-in diagrams (histogram, grouping, linear regression, quantiles) which adjusts dynamically according to user actions,
  • order data - each column can be ordered ascending or descending,
  • export data - selected set of data, together with linked plots, can be exported to XLSX spreadsheet file or CSV.

History

The tool was originally created for real estate appraisal as it gives the possibility, for people working in that area, to estimate past, current and future value of analyzed properties. When project/start-up was dropped, I've decided to release a less specialized application as an open source project. Most advanced and dedicated for real estates functionalities were cut out, basic and intermediate ones stayed.

Used tools and libs

Tool Windows Lubuntu
OS version 10 22H2 22.04
GCC 11.2.0 11.3.0
CMake 3.25.0 3.25.0
Git 2.38.1 2.34.1
Qt 6.5.2 6.5.2
Qt Creator 10.0.2 10.0.2
Qwt 6.2 6.2
QuaZip 1.4 1.4
Zlib 1.2.13 1.2.13
Eible 1.1.0 1.1.0
QwtBle 1.1.0 1.1.0
Wble 1.1.0 1.1.0

Compilation and installation

Use directly CMake or Qt Creator. CMake should:

  • configure everything automatically,
  • download dependencies using Git (QuaZip, Zlib, Eible, Wble, Qwtble, Qwt),
  • build dependencies,
  • compile Volbx and create binaries.

This is of course a happy path...

TIPS: set CMAKE_PREFIX_PATH env variable (should point to Qt) and add qmake location to PATH variable (QWT building expects it).

Licensing

Volbx is published using LGPLv3 license.

The project uses the following software and licenses:

  • Qt, Qwt, QuaZip, Eible, Wble and Qwtble libraries - LGPL licenses (more on qt-project.org, quazip.sourceforge.net, qwt.sourceforge.net and github.com/przemek83),
  • Zlib - Zlib license (can be found on zlib.net).

Updater

  1. Build target VersionCheck.
  2. Run VersionCheck.
  3. Following window should be shown:

Alt text

Setup update server

  1. Get a domain and hosting :)
  2. Create a simple .php file which contains something similar to this:
<?
echo("Volbx-Update-Info\n");

echo("1.10");

chdir("current/");
foreach (glob("*") as $filename) {
    echo "\n$filename;" . filesize($filename);
}
?>
  1. Copy .php file to hosting.
  2. Create folder current in directory where .php file is located.
  3. Add new/other version of Volbx and/or updater in current directory.
  4. Change code of Networking namespace in Volbx to point to proper address. Look for QNetworkRequest Networking::getCurrentVersionRequest() and QNetworkRequest Networking::getDownloadFileRequest(const QString& file)
  5. Compile VersionChecker and run it.
  6. Application should connect to given address and download content of current folder.

Remarks:

  • Updater is doing correctness checks using file sizes. Checksums should be used instead.
  • When I've created VersionChecker I've decided to use the simplest known by me solution. I do not know if it is safe and 'proper' enough, but it worked for me. I'm not web developer ;)
  • Windows needs admin rights (as of ~2012) to execute files having in name strings like "update", "install" or "setup". I've picked name VersionChecker to work around that problem.
  • On Windows OS, updater cannot overwrite file which are being used (as of ~2012). There is a special mechanism in place for replacing used/locked files:
    • close Volbx,
    • run updater,
    • download files,
    • change not used binaries/libs,
    • on next run of Volbx replace automatically used/blocked ones.

Testing

  1. Compile project.
  2. Run target named tests.
  3. Check output. All tests should have status PASSED.

Tests are done using Qt test framework.

Potential further improvements

  • Upgrade code to use C++20.
  • Measure and increase test coverage.
  • Setup static analysis (CppCheck, Clang Tidy, Clazy).

Screenshots

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

volbx's People

Contributors

przemek83 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

volbx's Issues

Add option to pick sheet on import

Currently there is no option to load sheet different that first one while importing spreadsheet file. Add possibility to choose which sheet user would like to import.

Bump QuaZip lib version

Use newer QuaZip lib version. Seems like building code was changed in QuaZip and Volbx code need to be adjusted.

Crash when resizing group plot on Linux

HTR:

  1. Open on Linux data.
  2. open group plot.
  3. Resize window.

Expected:
All OK
Actual:
Crash (seg fault) with stack:
GroupPlotUI::resizeEvent
GroupPlotUI::updateQuantilesPlotExtent()
QApplication::processEvents()

Not reproducible on Windows. Not reproducible using example project from QwtBle lib.

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.