Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Starting App from other class
QtWS25 Last Chance

Starting App from other class

Scheduled Pinned Locked Moved Unsolved General and Desktop
classstartapplication
16 Posts 3 Posters 1.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on 25 May 2020, 11:17 last edited by
    #1

    Hello everybody,
    I have for example this code:

    /****************************************************************************
    **
    ** Copyright (C) 2016 The Qt Company Ltd.
    ** Contact: https://www.qt.io/licensing/
    **
    ** This file is part of the Qt Data Visualization module of the Qt Toolkit.
    **
    ** $QT_BEGIN_LICENSE:GPL$
    ** Commercial License Usage
    ** Licensees holding valid commercial Qt licenses may use this file in
    ** accordance with the commercial license agreement provided with the
    ** Software or, alternatively, in accordance with the terms contained in
    ** a written agreement between you and The Qt Company. For licensing terms
    ** and conditions see https://www.qt.io/terms-conditions. For further
    ** information use the contact form at https://www.qt.io/contact-us.
    **
    ** GNU General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU
    ** General Public License version 3 or (at your option) any later version
    ** approved by the KDE Free Qt Foundation. The licenses are as published by
    ** the Free Software Foundation and appearing in the file LICENSE.GPL3
    ** included in the packaging of this file. Please review the following
    ** information to ensure the GNU General Public License requirements will
    ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
    **
    ** $QT_END_LICENSE$
    **
    ****************************************************************************/
    
    #include <QtDataVisualization/q3dbars.h>
    #include <QtDataVisualization/qcategory3daxis.h>
    #include <QtDataVisualization/qitemmodelbardataproxy.h>
    #include <QtDataVisualization/qvalue3daxis.h>
    #include <QtDataVisualization/q3dscene.h>
    #include <QtDataVisualization/q3dcamera.h>
    #include <QtDataVisualization/qbar3dseries.h>
    #include <QtDataVisualization/q3dtheme.h>
    
    //MainWindow
    #include <ui_mainwindow.h>
    
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QVBoxLayout>
    #include <QtWidgets/QTableWidget>
    #include <QtGui/QScreen>
    #include <QtCore/QRandomGenerator>
    #include <QtCore/QTimer>
    #include <QtGui/QFont>
    #include <QtCore/QDebug>
    #include <QtWidgets/QHeaderView>
    #include <QtWidgets/QMessageBox>
    
    #define USE_STATIC_DATA
    
    using namespace QtDataVisualization;
    
    class GraphDataGenerator : public QObject
    {
    public:
        explicit GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget);
        ~GraphDataGenerator();
    
        void setupModel();
        void addRow();
        void changeStyle();
        void changePresetCamera();
        void changeTheme();
        void start();
        void selectFromTable(const QPoint &selection);
        void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
        void fixTableSize();
    
    private:
        Q3DBars *m_graph;
        QTimer *m_dataTimer;
        int m_columnCount;
        int m_rowCount;
        QTableWidget *m_tableWidget; // not owned
    };
    
    GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget)
        : m_graph(bargraph),
          m_dataTimer(0),
          m_columnCount(100),
          m_rowCount(50),
          m_tableWidget(tableWidget)
    {
        //! [5]
        // Set up bar specifications; make the bars as wide as they are deep,
        // and add a small space between them
        m_graph->setBarThickness(1.0f);
        m_graph->setBarSpacing(QSizeF(0.2, 0.2));
    
        //! [5]
    #ifndef USE_STATIC_DATA
        // Set up sample space; make it as deep as it's wide
        m_graph->rowAxis()->setRange(0, m_rowCount);
        m_graph->columnAxis()->setRange(0, m_columnCount);
        m_tableWidget->setColumnCount(m_columnCount);
    
        // Set selection mode to full
        m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn);
    
        // Hide axis labels by explicitly setting one empty string as label list
        m_graph->rowAxis()->setLabels(QStringList(QString()));
        m_graph->columnAxis()->setLabels(QStringList(QString()));
    
        m_graph->seriesList().at(0)->setItemLabelFormat(QStringLiteral("@valueLabel"));
    #else
        //! [6]
        // Set selection mode to slice row
        m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow | QAbstract3DGraph::SelectionSlice);
    
        //! [6]
    #endif
    
        //! [7]
        // Set theme
        m_graph->activeTheme()->setType(Q3DTheme::ThemeDigia);
    
        // Set font
        m_graph->activeTheme()->setFont(QFont("Impact", 20));
    
        // Set preset camera position
        m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
        //! [7]
    }
    
    GraphDataGenerator::~GraphDataGenerator()
    {
        if (m_dataTimer) {
            m_dataTimer->stop();
            delete m_dataTimer;
        }
        delete m_graph;
    }
    
    void GraphDataGenerator::start()
    {
    #ifndef USE_STATIC_DATA
        m_dataTimer = new QTimer();
        m_dataTimer->setTimerType(Qt::CoarseTimer);
        QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::addRow);
        m_dataTimer->start(0);
        m_tableWidget->setFixedWidth(m_graph->width());
    #else
        //! [8]
        setupModel();
    
        // Table needs to be shown before the size of its headers can be accurately obtained,
        // so we postpone it a bit
        m_dataTimer = new QTimer();
        m_dataTimer->setSingleShot(true);
        QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::fixTableSize);
        m_dataTimer->start(0);
        //! [8]
    #endif
    }
    
    void GraphDataGenerator::setupModel()
    {
        //! [9]
        // Set up row and column names
        QStringList days;
        days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
        QStringList weeks;
        weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
    
        // Set up data         Mon  Tue  Wed  Thu  Fri  Sat  Sun
        float hours[5][7] = {{2.0f, 1.0f, 3.0f, 0.2f, 1.0f, 5.0f, 10.0f},     // week 1
                             {0.5f, 1.0f, 3.0f, 1.0f, 2.0f, 2.0f, 3.0f},      // week 2
                             {1.0f, 1.0f, 2.0f, 1.0f, 4.0f, 4.0f, 4.0f},      // week 3
                             {0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.3f},      // week 4
                             {3.0f, 3.0f, 6.0f, 2.0f, 2.0f, 1.0f, 1.0f}};     // week 5
        //! [9]
    
        // Add labels
        //! [10]
        m_graph->rowAxis()->setTitle("Week of year");
        m_graph->rowAxis()->setTitleVisible(true);
        m_graph->columnAxis()->setTitle("Day of week");
        m_graph->columnAxis()->setTitleVisible(true);
        m_graph->valueAxis()->setTitle("Hours spent on the Internet");
        m_graph->valueAxis()->setTitleVisible(true);
        m_graph->valueAxis()->setLabelFormat("%.1f h");
        //! [10]
    
        //! [11]
        m_tableWidget->setRowCount(5);
        m_tableWidget->setColumnCount(7);
        m_tableWidget->setHorizontalHeaderLabels(days);
        m_tableWidget->setVerticalHeaderLabels(weeks);
        m_tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        m_tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        m_tableWidget->setCurrentCell(-1, -1);
        m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
        //! [11]
    
        //! [12]
        for (int week = 0; week < weeks.size(); week++) {
            for (int day = 0; day < days.size(); day++) {
                QModelIndex index = m_tableWidget->model()->index(week, day);
                m_tableWidget->model()->setData(index, hours[week][day]);
            }
        }
        //! [12]
    }
    
    void GraphDataGenerator::addRow()
    {
        m_tableWidget->model()->insertRow(0);
        if (m_tableWidget->model()->rowCount() > m_rowCount)
            m_tableWidget->model()->removeRow(m_rowCount);
        for (int i = 0; i < m_columnCount; i++) {
            QModelIndex index = m_tableWidget->model()->index(0, i);
            m_tableWidget->model()->setData(index,
                ((float)i / (float)m_columnCount) / 2.0f +
                                            (float)(QRandomGenerator::global()->bounded(30)) / 100.0f);
        }
        m_tableWidget->resizeColumnsToContents();
    }
    
    //! [13]
    void GraphDataGenerator::selectFromTable(const QPoint &selection)
    {
        m_tableWidget->setFocus();
        m_tableWidget->setCurrentCell(selection.x(), selection.y());
    }
    //! [13]
    
    //! [14]
    void GraphDataGenerator::selectedFromTable(int currentRow, int currentColumn,
                                               int previousRow, int previousColumn)
    {
        Q_UNUSED(previousRow)
        Q_UNUSED(previousColumn)
        m_graph->seriesList().at(0)->setSelectedBar(QPoint(currentRow, currentColumn));
    }
    //! [14]
    
    void GraphDataGenerator::fixTableSize()
    {
        int width = m_tableWidget->horizontalHeader()->length();
        width += m_tableWidget->verticalHeader()->width();
        m_tableWidget->setFixedWidth(width + 2);
        int height = m_tableWidget->verticalHeader()->length();
        height += m_tableWidget->horizontalHeader()->height();
        m_tableWidget->setFixedHeight(height + 2);
    }
    
    int main(int argc, char **argv)
    {
        //! [0]
        QApplication app(argc, argv);
        Q3DBars *graph = new Q3DBars();
        QWidget *container = QWidget::createWindowContainer(graph);
        //! [0]
    
        if (!graph->hasContext()) {
            QMessageBox msgBox;
            msgBox.setText("Couldn't initialize the OpenGL context.");
            msgBox.exec();
            return -1;
        }
    
        QSize screenSize = graph->screen()->size();
        container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
        container->setMaximumSize(screenSize);
        container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        container->setFocusPolicy(Qt::StrongFocus);
    
        //! [1]
        QWidget widget;
        QVBoxLayout *layout = new QVBoxLayout(&widget);
        QTableWidget *tableWidget = new QTableWidget(&widget);
        layout->addWidget(container, 1);
        layout->addWidget(tableWidget, 1, Qt::AlignHCenter);
        //! [1]
    
        tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
        tableWidget->setAlternatingRowColors(true);
        widget.setWindowTitle(QStringLiteral("Hours spent on the Internet"));
    
        //! [2]
        // Since we are dealing with QTableWidget, the model will already have data sorted properly
        // into rows and columns, so we simply set useModelCategories property to true to utilize this.
        QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model());
        proxy->setUseModelCategories(true);
        QBar3DSeries *series = new QBar3DSeries(proxy);
        series->setMesh(QAbstract3DSeries::MeshPyramid);
        graph->addSeries(series);
        //! [2]
    
        //! [3]
        GraphDataGenerator generator(graph, tableWidget);
        QObject::connect(series, &QBar3DSeries::selectedBarChanged, &generator,
                         &GraphDataGenerator::selectFromTable);
        QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator,
                         &GraphDataGenerator::selectedFromTable);
        //! [3]
    
        //! [4]
        widget.show();
        generator.start();
        return app.exec();
        //! [4]
    }
    
    

    It's an QT-example for datavizalisation.

    and now my question: How can I start this App from another class?
    I can't use the Main() function for that, am I right?

    Thanks
    Henrik

    J 1 Reply Last reply 25 May 2020, 11:25
    0
    • ? A Former User
      25 May 2020, 11:17

      Hello everybody,
      I have for example this code:

      /****************************************************************************
      **
      ** Copyright (C) 2016 The Qt Company Ltd.
      ** Contact: https://www.qt.io/licensing/
      **
      ** This file is part of the Qt Data Visualization module of the Qt Toolkit.
      **
      ** $QT_BEGIN_LICENSE:GPL$
      ** Commercial License Usage
      ** Licensees holding valid commercial Qt licenses may use this file in
      ** accordance with the commercial license agreement provided with the
      ** Software or, alternatively, in accordance with the terms contained in
      ** a written agreement between you and The Qt Company. For licensing terms
      ** and conditions see https://www.qt.io/terms-conditions. For further
      ** information use the contact form at https://www.qt.io/contact-us.
      **
      ** GNU General Public License Usage
      ** Alternatively, this file may be used under the terms of the GNU
      ** General Public License version 3 or (at your option) any later version
      ** approved by the KDE Free Qt Foundation. The licenses are as published by
      ** the Free Software Foundation and appearing in the file LICENSE.GPL3
      ** included in the packaging of this file. Please review the following
      ** information to ensure the GNU General Public License requirements will
      ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
      **
      ** $QT_END_LICENSE$
      **
      ****************************************************************************/
      
      #include <QtDataVisualization/q3dbars.h>
      #include <QtDataVisualization/qcategory3daxis.h>
      #include <QtDataVisualization/qitemmodelbardataproxy.h>
      #include <QtDataVisualization/qvalue3daxis.h>
      #include <QtDataVisualization/q3dscene.h>
      #include <QtDataVisualization/q3dcamera.h>
      #include <QtDataVisualization/qbar3dseries.h>
      #include <QtDataVisualization/q3dtheme.h>
      
      //MainWindow
      #include <ui_mainwindow.h>
      
      #include <QtWidgets/QApplication>
      #include <QtWidgets/QVBoxLayout>
      #include <QtWidgets/QTableWidget>
      #include <QtGui/QScreen>
      #include <QtCore/QRandomGenerator>
      #include <QtCore/QTimer>
      #include <QtGui/QFont>
      #include <QtCore/QDebug>
      #include <QtWidgets/QHeaderView>
      #include <QtWidgets/QMessageBox>
      
      #define USE_STATIC_DATA
      
      using namespace QtDataVisualization;
      
      class GraphDataGenerator : public QObject
      {
      public:
          explicit GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget);
          ~GraphDataGenerator();
      
          void setupModel();
          void addRow();
          void changeStyle();
          void changePresetCamera();
          void changeTheme();
          void start();
          void selectFromTable(const QPoint &selection);
          void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
          void fixTableSize();
      
      private:
          Q3DBars *m_graph;
          QTimer *m_dataTimer;
          int m_columnCount;
          int m_rowCount;
          QTableWidget *m_tableWidget; // not owned
      };
      
      GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget)
          : m_graph(bargraph),
            m_dataTimer(0),
            m_columnCount(100),
            m_rowCount(50),
            m_tableWidget(tableWidget)
      {
          //! [5]
          // Set up bar specifications; make the bars as wide as they are deep,
          // and add a small space between them
          m_graph->setBarThickness(1.0f);
          m_graph->setBarSpacing(QSizeF(0.2, 0.2));
      
          //! [5]
      #ifndef USE_STATIC_DATA
          // Set up sample space; make it as deep as it's wide
          m_graph->rowAxis()->setRange(0, m_rowCount);
          m_graph->columnAxis()->setRange(0, m_columnCount);
          m_tableWidget->setColumnCount(m_columnCount);
      
          // Set selection mode to full
          m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn);
      
          // Hide axis labels by explicitly setting one empty string as label list
          m_graph->rowAxis()->setLabels(QStringList(QString()));
          m_graph->columnAxis()->setLabels(QStringList(QString()));
      
          m_graph->seriesList().at(0)->setItemLabelFormat(QStringLiteral("@valueLabel"));
      #else
          //! [6]
          // Set selection mode to slice row
          m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow | QAbstract3DGraph::SelectionSlice);
      
          //! [6]
      #endif
      
          //! [7]
          // Set theme
          m_graph->activeTheme()->setType(Q3DTheme::ThemeDigia);
      
          // Set font
          m_graph->activeTheme()->setFont(QFont("Impact", 20));
      
          // Set preset camera position
          m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
          //! [7]
      }
      
      GraphDataGenerator::~GraphDataGenerator()
      {
          if (m_dataTimer) {
              m_dataTimer->stop();
              delete m_dataTimer;
          }
          delete m_graph;
      }
      
      void GraphDataGenerator::start()
      {
      #ifndef USE_STATIC_DATA
          m_dataTimer = new QTimer();
          m_dataTimer->setTimerType(Qt::CoarseTimer);
          QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::addRow);
          m_dataTimer->start(0);
          m_tableWidget->setFixedWidth(m_graph->width());
      #else
          //! [8]
          setupModel();
      
          // Table needs to be shown before the size of its headers can be accurately obtained,
          // so we postpone it a bit
          m_dataTimer = new QTimer();
          m_dataTimer->setSingleShot(true);
          QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::fixTableSize);
          m_dataTimer->start(0);
          //! [8]
      #endif
      }
      
      void GraphDataGenerator::setupModel()
      {
          //! [9]
          // Set up row and column names
          QStringList days;
          days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
          QStringList weeks;
          weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
      
          // Set up data         Mon  Tue  Wed  Thu  Fri  Sat  Sun
          float hours[5][7] = {{2.0f, 1.0f, 3.0f, 0.2f, 1.0f, 5.0f, 10.0f},     // week 1
                               {0.5f, 1.0f, 3.0f, 1.0f, 2.0f, 2.0f, 3.0f},      // week 2
                               {1.0f, 1.0f, 2.0f, 1.0f, 4.0f, 4.0f, 4.0f},      // week 3
                               {0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.3f},      // week 4
                               {3.0f, 3.0f, 6.0f, 2.0f, 2.0f, 1.0f, 1.0f}};     // week 5
          //! [9]
      
          // Add labels
          //! [10]
          m_graph->rowAxis()->setTitle("Week of year");
          m_graph->rowAxis()->setTitleVisible(true);
          m_graph->columnAxis()->setTitle("Day of week");
          m_graph->columnAxis()->setTitleVisible(true);
          m_graph->valueAxis()->setTitle("Hours spent on the Internet");
          m_graph->valueAxis()->setTitleVisible(true);
          m_graph->valueAxis()->setLabelFormat("%.1f h");
          //! [10]
      
          //! [11]
          m_tableWidget->setRowCount(5);
          m_tableWidget->setColumnCount(7);
          m_tableWidget->setHorizontalHeaderLabels(days);
          m_tableWidget->setVerticalHeaderLabels(weeks);
          m_tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
          m_tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
          m_tableWidget->setCurrentCell(-1, -1);
          m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
          //! [11]
      
          //! [12]
          for (int week = 0; week < weeks.size(); week++) {
              for (int day = 0; day < days.size(); day++) {
                  QModelIndex index = m_tableWidget->model()->index(week, day);
                  m_tableWidget->model()->setData(index, hours[week][day]);
              }
          }
          //! [12]
      }
      
      void GraphDataGenerator::addRow()
      {
          m_tableWidget->model()->insertRow(0);
          if (m_tableWidget->model()->rowCount() > m_rowCount)
              m_tableWidget->model()->removeRow(m_rowCount);
          for (int i = 0; i < m_columnCount; i++) {
              QModelIndex index = m_tableWidget->model()->index(0, i);
              m_tableWidget->model()->setData(index,
                  ((float)i / (float)m_columnCount) / 2.0f +
                                              (float)(QRandomGenerator::global()->bounded(30)) / 100.0f);
          }
          m_tableWidget->resizeColumnsToContents();
      }
      
      //! [13]
      void GraphDataGenerator::selectFromTable(const QPoint &selection)
      {
          m_tableWidget->setFocus();
          m_tableWidget->setCurrentCell(selection.x(), selection.y());
      }
      //! [13]
      
      //! [14]
      void GraphDataGenerator::selectedFromTable(int currentRow, int currentColumn,
                                                 int previousRow, int previousColumn)
      {
          Q_UNUSED(previousRow)
          Q_UNUSED(previousColumn)
          m_graph->seriesList().at(0)->setSelectedBar(QPoint(currentRow, currentColumn));
      }
      //! [14]
      
      void GraphDataGenerator::fixTableSize()
      {
          int width = m_tableWidget->horizontalHeader()->length();
          width += m_tableWidget->verticalHeader()->width();
          m_tableWidget->setFixedWidth(width + 2);
          int height = m_tableWidget->verticalHeader()->length();
          height += m_tableWidget->horizontalHeader()->height();
          m_tableWidget->setFixedHeight(height + 2);
      }
      
      int main(int argc, char **argv)
      {
          //! [0]
          QApplication app(argc, argv);
          Q3DBars *graph = new Q3DBars();
          QWidget *container = QWidget::createWindowContainer(graph);
          //! [0]
      
          if (!graph->hasContext()) {
              QMessageBox msgBox;
              msgBox.setText("Couldn't initialize the OpenGL context.");
              msgBox.exec();
              return -1;
          }
      
          QSize screenSize = graph->screen()->size();
          container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
          container->setMaximumSize(screenSize);
          container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
          container->setFocusPolicy(Qt::StrongFocus);
      
          //! [1]
          QWidget widget;
          QVBoxLayout *layout = new QVBoxLayout(&widget);
          QTableWidget *tableWidget = new QTableWidget(&widget);
          layout->addWidget(container, 1);
          layout->addWidget(tableWidget, 1, Qt::AlignHCenter);
          //! [1]
      
          tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
          tableWidget->setAlternatingRowColors(true);
          widget.setWindowTitle(QStringLiteral("Hours spent on the Internet"));
      
          //! [2]
          // Since we are dealing with QTableWidget, the model will already have data sorted properly
          // into rows and columns, so we simply set useModelCategories property to true to utilize this.
          QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model());
          proxy->setUseModelCategories(true);
          QBar3DSeries *series = new QBar3DSeries(proxy);
          series->setMesh(QAbstract3DSeries::MeshPyramid);
          graph->addSeries(series);
          //! [2]
      
          //! [3]
          GraphDataGenerator generator(graph, tableWidget);
          QObject::connect(series, &QBar3DSeries::selectedBarChanged, &generator,
                           &GraphDataGenerator::selectFromTable);
          QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator,
                           &GraphDataGenerator::selectedFromTable);
          //! [3]
      
          //! [4]
          widget.show();
          generator.start();
          return app.exec();
          //! [4]
      }
      
      

      It's an QT-example for datavizalisation.

      and now my question: How can I start this App from another class?
      I can't use the Main() function for that, am I right?

      Thanks
      Henrik

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 25 May 2020, 11:25 last edited by
      #2

      @HenrikSt-0 You can simply integrate this code in your app.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      ? 1 Reply Last reply 25 May 2020, 11:32
      0
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 25 May 2020, 11:26 last edited by
        #3

        Hi and welcome to devnet,

        Do you mean starting the executable that can be generated from the example or re-use the code in your own application ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • J jsulm
          25 May 2020, 11:25

          @HenrikSt-0 You can simply integrate this code in your app.

          ? Offline
          ? Offline
          A Former User
          wrote on 25 May 2020, 11:32 last edited by
          #4

          @jsulm I know, but how?

          J 1 Reply Last reply 25 May 2020, 11:34
          0
          • ? A Former User
            25 May 2020, 11:32

            @jsulm I know, but how?

            J Offline
            J Offline
            jsulm
            Lifetime Qt Champion
            wrote on 25 May 2020, 11:34 last edited by
            #5

            @HenrikSt-0 Via copy/paste. Add new class GraphDataGenerator to your project and copy the code from example into it. Then copy the code from main in the example into your main...

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            ? 1 Reply Last reply 25 May 2020, 11:42
            0
            • J jsulm
              25 May 2020, 11:34

              @HenrikSt-0 Via copy/paste. Add new class GraphDataGenerator to your project and copy the code from example into it. Then copy the code from main in the example into your main...

              ? Offline
              ? Offline
              A Former User
              wrote on 25 May 2020, 11:42 last edited by
              #6

              @jsulm Oh sorry, I did not explained correctly...
              The code above is in a .cpp file.

              And the function, where I want to start the "application in the .cpp file" is

              void MainWindow::GraphicalDiagramm()
              {
                  //Start application from .cpp file here...
               }
              

              Do you understand?

              J 1 Reply Last reply 25 May 2020, 11:46
              0
              • ? A Former User
                25 May 2020, 11:42

                @jsulm Oh sorry, I did not explained correctly...
                The code above is in a .cpp file.

                And the function, where I want to start the "application in the .cpp file" is

                void MainWindow::GraphicalDiagramm()
                {
                    //Start application from .cpp file here...
                 }
                

                Do you understand?

                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 25 May 2020, 11:46 last edited by
                #7

                @HenrikSt-0 said in Starting App from other class:

                Do you understand?

                No, because I don't know what "Start application" means here. Usually that would mean to start an external executable in its own process. @SGaist already asked you about that.
                If you mean executing the code in MainWindow::GraphicalDiagramm() nothing stops you from putting the code from the main of that example (except the QApplication stuff ofcourse) into MainWindow::GraphicalDiagramm().

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • ? Offline
                  ? Offline
                  A Former User
                  wrote on 25 May 2020, 11:53 last edited by
                  #8

                  This is my function, and I copied the mainfunction into it:

                  void MainWindow::GrafischesDiagramm()
                  {
                      //! [0]
                     // QApplication app(argc, argv);
                      Q3DBars *graph = new Q3DBars();
                      QWidget *container = QWidget::createWindowContainer(graph);
                      //! [0]
                  
                      if (!graph->hasContext()) {
                          QMessageBox msgBox;
                          msgBox.setText("Couldn't initialize the OpenGL context.");
                          msgBox.exec();
                         // return -1;
                      }
                  
                      QSize screenSize = graph->screen()->size();
                      container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
                      container->setMaximumSize(screenSize);
                      container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
                      container->setFocusPolicy(Qt::StrongFocus);
                  
                      //! [1]
                      QWidget widget;
                      QVBoxLayout *layout = new QVBoxLayout(&widget);
                      QTableWidget *tableWidget = new QTableWidget(&widget);
                      layout->addWidget(container, 1);
                      layout->addWidget(tableWidget, 1, Qt::AlignHCenter);
                      //! [1]
                  
                      tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
                      tableWidget->setAlternatingRowColors(true);
                      widget.setWindowTitle(QStringLiteral("Hours spent on the Internet"));
                  
                      //! [2]
                      // Since we are dealing with QTableWidget, the model will already have data sorted properly
                      // into rows and columns, so we simply set useModelCategories property to true to utilize this.
                      QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model());
                      proxy->setUseModelCategories(true);
                      QBar3DSeries *series = new QBar3DSeries(proxy);
                      series->setMesh(QAbstract3DSeries::MeshPyramid);
                      graph->addSeries(series);
                      //! [2]
                  
                      //! [3]
                      GraphDataGenerator generator(graph, tableWidget);
                      QObject::connect(series, &QBar3DSeries::selectedBarChanged, &generator,
                                       &GraphDataGenerator::selectFromTable);
                      QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator,
                                       &GraphDataGenerator::selectedFromTable);
                      //! [3]
                  
                      //! [4]
                      widget.show();
                      generator.start();
                      //return app.exec();
                  }
                  
                  

                  And this is outside of the mainwindow class:

                  //Grafisches Diagramm
                  #include <QtDataVisualization/q3dbars.h>
                  #include <QtDataVisualization/qcategory3daxis.h>
                  #include <QtDataVisualization/qitemmodelbardataproxy.h>
                  #include <QtDataVisualization/qvalue3daxis.h>
                  #include <QtDataVisualization/q3dscene.h>
                  #include <QtDataVisualization/q3dcamera.h>
                  #include <QtDataVisualization/qbar3dseries.h>
                  #include <QtDataVisualization/q3dtheme.h>
                  
                  
                  #include <QtWidgets/QApplication>
                  #include <QtWidgets/QVBoxLayout>
                  #include <QtWidgets/QTableWidget>
                  #include <QtGui/QScreen>
                  #include <QtCore/QRandomGenerator>
                  #include <QtCore/QTimer>
                  #include <QtGui/QFont>
                  #include <QtCore/QDebug>
                  #include <QtWidgets/QHeaderView>
                  #include <QtWidgets/QMessageBox>
                  
                  #define USE_STATIC_DATA
                  
                  using namespace QtDataVisualization;
                  
                  class GraphDataGenerator : public QObject
                  {
                  public:
                      explicit GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget);
                      ~GraphDataGenerator();
                  
                      void setupModel();
                      void addRow();
                      void changeStyle();
                      void changePresetCamera();
                      void changeTheme();
                      void start();
                      void selectFromTable(const QPoint &selection);
                      void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
                      void fixTableSize();
                  
                  private:
                      Q3DBars *m_graph;
                      QTimer *m_dataTimer;
                      int m_columnCount;
                      int m_rowCount;
                      QTableWidget *m_tableWidget; // not owned
                  };
                  
                  GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget)
                      : m_graph(bargraph),
                        m_dataTimer(0),
                        m_columnCount(100),
                        m_rowCount(50),
                        m_tableWidget(tableWidget)
                  {
                      //! [5]
                      // Set up bar specifications; make the bars as wide as they are deep,
                      // and add a small space between them
                      m_graph->setBarThickness(1.0f);
                      m_graph->setBarSpacing(QSizeF(0.2, 0.2));
                  
                      //! [5]
                  #ifndef USE_STATIC_DATA
                      // Set up sample space; make it as deep as it's wide
                      m_graph->rowAxis()->setRange(0, m_rowCount);
                      m_graph->columnAxis()->setRange(0, m_columnCount);
                      m_tableWidget->setColumnCount(m_columnCount);
                  
                      // Set selection mode to full
                      m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn);
                  
                      // Hide axis labels by explicitly setting one empty string as label list
                      m_graph->rowAxis()->setLabels(QStringList(QString()));
                      m_graph->columnAxis()->setLabels(QStringList(QString()));
                  
                      m_graph->seriesList().at(0)->setItemLabelFormat(QStringLiteral("@valueLabel"));
                  #else
                      //! [6]
                      // Set selection mode to slice row
                      m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow | QAbstract3DGraph::SelectionSlice);
                  
                      //! [6]
                  #endif
                  
                      //! [7]
                      // Set theme
                      m_graph->activeTheme()->setType(Q3DTheme::ThemeDigia);
                  
                      // Set font
                      m_graph->activeTheme()->setFont(QFont("Impact", 20));
                  
                      // Set preset camera position
                      m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
                      //! [7]
                  }
                  
                  GraphDataGenerator::~GraphDataGenerator()
                  {
                      if (m_dataTimer) {
                          m_dataTimer->stop();
                          delete m_dataTimer;
                      }
                      delete m_graph;
                  }
                  
                  void GraphDataGenerator::start()
                  {
                  #ifndef USE_STATIC_DATA
                      m_dataTimer = new QTimer();
                      m_dataTimer->setTimerType(Qt::CoarseTimer);
                      QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::addRow);
                      m_dataTimer->start(0);
                      m_tableWidget->setFixedWidth(m_graph->width());
                  #else
                      //! [8]
                      setupModel();
                  
                      // Table needs to be shown before the size of its headers can be accurately obtained,
                      // so we postpone it a bit
                      m_dataTimer = new QTimer();
                      m_dataTimer->setSingleShot(true);
                      QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::fixTableSize);
                      m_dataTimer->start(0);
                      //! [8]
                  #endif
                  }
                  
                  void GraphDataGenerator::setupModel()
                  {
                      //! [9]
                      // Set up row and column names
                      QStringList days;
                      days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
                      QStringList weeks;
                      weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
                  
                      // Set up data         Mon  Tue  Wed  Thu  Fri  Sat  Sun
                      float hours[5][7] = {{2.0f, 1.0f, 3.0f, 0.2f, 1.0f, 5.0f, 10.0f},     // week 1
                                           {0.5f, 1.0f, 3.0f, 1.0f, 2.0f, 2.0f, 3.0f},      // week 2
                                           {1.0f, 1.0f, 2.0f, 1.0f, 4.0f, 4.0f, 4.0f},      // week 3
                                           {0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.3f},      // week 4
                                           {3.0f, 3.0f, 6.0f, 2.0f, 2.0f, 1.0f, 1.0f}};     // week 5
                      //! [9]
                  
                      // Add labels
                      //! [10]
                      m_graph->rowAxis()->setTitle("Week of year");
                      m_graph->rowAxis()->setTitleVisible(true);
                      m_graph->columnAxis()->setTitle("Day of week");
                      m_graph->columnAxis()->setTitleVisible(true);
                      m_graph->valueAxis()->setTitle("Hours spent on the Internet");
                      m_graph->valueAxis()->setTitleVisible(true);
                      m_graph->valueAxis()->setLabelFormat("%.1f h");
                      //! [10]
                  
                      //! [11]
                      m_tableWidget->setRowCount(5);
                      m_tableWidget->setColumnCount(7);
                      m_tableWidget->setHorizontalHeaderLabels(days);
                      m_tableWidget->setVerticalHeaderLabels(weeks);
                      m_tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                      m_tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                      m_tableWidget->setCurrentCell(-1, -1);
                      m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
                      //! [11]
                  
                      //! [12]
                      for (int week = 0; week < weeks.size(); week++) {
                          for (int day = 0; day < days.size(); day++) {
                              QModelIndex index = m_tableWidget->model()->index(week, day);
                              m_tableWidget->model()->setData(index, hours[week][day]);
                          }
                      }
                      //! [12]
                  }
                  
                  void GraphDataGenerator::addRow()
                  {
                      m_tableWidget->model()->insertRow(0);
                      if (m_tableWidget->model()->rowCount() > m_rowCount)
                          m_tableWidget->model()->removeRow(m_rowCount);
                      for (int i = 0; i < m_columnCount; i++) {
                          QModelIndex index = m_tableWidget->model()->index(0, i);
                          m_tableWidget->model()->setData(index,
                              ((float)i / (float)m_columnCount) / 2.0f +
                                                          (float)(QRandomGenerator::global()->bounded(30)) / 100.0f);
                      }
                      m_tableWidget->resizeColumnsToContents();
                  }
                  
                  //! [13]
                  void GraphDataGenerator::selectFromTable(const QPoint &selection)
                  {
                      m_tableWidget->setFocus();
                      m_tableWidget->setCurrentCell(selection.x(), selection.y());
                  }
                  //! [13]
                  
                  //! [14]
                  void GraphDataGenerator::selectedFromTable(int currentRow, int currentColumn,
                                                             int previousRow, int previousColumn)
                  {
                      Q_UNUSED(previousRow)
                      Q_UNUSED(previousColumn)
                      m_graph->seriesList().at(0)->setSelectedBar(QPoint(currentRow, currentColumn));
                  }
                  //! [14]
                  
                  void GraphDataGenerator::fixTableSize()
                  {
                      int width = m_tableWidget->horizontalHeader()->length();
                      width += m_tableWidget->verticalHeader()->width();
                      m_tableWidget->setFixedWidth(width + 2);
                      int height = m_tableWidget->verticalHeader()->length();
                      height += m_tableWidget->horizontalHeader()->height();
                      m_tableWidget->setFixedHeight(height + 2);
                  }
                  
                  

                  But it says:unknown type name 'QBar3DSeries, QItemModelBarDataProxy, ...

                  Why? I did it like you said :)

                  J 1 Reply Last reply 25 May 2020, 11:57
                  0
                  • ? A Former User
                    25 May 2020, 11:53

                    This is my function, and I copied the mainfunction into it:

                    void MainWindow::GrafischesDiagramm()
                    {
                        //! [0]
                       // QApplication app(argc, argv);
                        Q3DBars *graph = new Q3DBars();
                        QWidget *container = QWidget::createWindowContainer(graph);
                        //! [0]
                    
                        if (!graph->hasContext()) {
                            QMessageBox msgBox;
                            msgBox.setText("Couldn't initialize the OpenGL context.");
                            msgBox.exec();
                           // return -1;
                        }
                    
                        QSize screenSize = graph->screen()->size();
                        container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
                        container->setMaximumSize(screenSize);
                        container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
                        container->setFocusPolicy(Qt::StrongFocus);
                    
                        //! [1]
                        QWidget widget;
                        QVBoxLayout *layout = new QVBoxLayout(&widget);
                        QTableWidget *tableWidget = new QTableWidget(&widget);
                        layout->addWidget(container, 1);
                        layout->addWidget(tableWidget, 1, Qt::AlignHCenter);
                        //! [1]
                    
                        tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
                        tableWidget->setAlternatingRowColors(true);
                        widget.setWindowTitle(QStringLiteral("Hours spent on the Internet"));
                    
                        //! [2]
                        // Since we are dealing with QTableWidget, the model will already have data sorted properly
                        // into rows and columns, so we simply set useModelCategories property to true to utilize this.
                        QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model());
                        proxy->setUseModelCategories(true);
                        QBar3DSeries *series = new QBar3DSeries(proxy);
                        series->setMesh(QAbstract3DSeries::MeshPyramid);
                        graph->addSeries(series);
                        //! [2]
                    
                        //! [3]
                        GraphDataGenerator generator(graph, tableWidget);
                        QObject::connect(series, &QBar3DSeries::selectedBarChanged, &generator,
                                         &GraphDataGenerator::selectFromTable);
                        QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator,
                                         &GraphDataGenerator::selectedFromTable);
                        //! [3]
                    
                        //! [4]
                        widget.show();
                        generator.start();
                        //return app.exec();
                    }
                    
                    

                    And this is outside of the mainwindow class:

                    //Grafisches Diagramm
                    #include <QtDataVisualization/q3dbars.h>
                    #include <QtDataVisualization/qcategory3daxis.h>
                    #include <QtDataVisualization/qitemmodelbardataproxy.h>
                    #include <QtDataVisualization/qvalue3daxis.h>
                    #include <QtDataVisualization/q3dscene.h>
                    #include <QtDataVisualization/q3dcamera.h>
                    #include <QtDataVisualization/qbar3dseries.h>
                    #include <QtDataVisualization/q3dtheme.h>
                    
                    
                    #include <QtWidgets/QApplication>
                    #include <QtWidgets/QVBoxLayout>
                    #include <QtWidgets/QTableWidget>
                    #include <QtGui/QScreen>
                    #include <QtCore/QRandomGenerator>
                    #include <QtCore/QTimer>
                    #include <QtGui/QFont>
                    #include <QtCore/QDebug>
                    #include <QtWidgets/QHeaderView>
                    #include <QtWidgets/QMessageBox>
                    
                    #define USE_STATIC_DATA
                    
                    using namespace QtDataVisualization;
                    
                    class GraphDataGenerator : public QObject
                    {
                    public:
                        explicit GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget);
                        ~GraphDataGenerator();
                    
                        void setupModel();
                        void addRow();
                        void changeStyle();
                        void changePresetCamera();
                        void changeTheme();
                        void start();
                        void selectFromTable(const QPoint &selection);
                        void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
                        void fixTableSize();
                    
                    private:
                        Q3DBars *m_graph;
                        QTimer *m_dataTimer;
                        int m_columnCount;
                        int m_rowCount;
                        QTableWidget *m_tableWidget; // not owned
                    };
                    
                    GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget)
                        : m_graph(bargraph),
                          m_dataTimer(0),
                          m_columnCount(100),
                          m_rowCount(50),
                          m_tableWidget(tableWidget)
                    {
                        //! [5]
                        // Set up bar specifications; make the bars as wide as they are deep,
                        // and add a small space between them
                        m_graph->setBarThickness(1.0f);
                        m_graph->setBarSpacing(QSizeF(0.2, 0.2));
                    
                        //! [5]
                    #ifndef USE_STATIC_DATA
                        // Set up sample space; make it as deep as it's wide
                        m_graph->rowAxis()->setRange(0, m_rowCount);
                        m_graph->columnAxis()->setRange(0, m_columnCount);
                        m_tableWidget->setColumnCount(m_columnCount);
                    
                        // Set selection mode to full
                        m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn);
                    
                        // Hide axis labels by explicitly setting one empty string as label list
                        m_graph->rowAxis()->setLabels(QStringList(QString()));
                        m_graph->columnAxis()->setLabels(QStringList(QString()));
                    
                        m_graph->seriesList().at(0)->setItemLabelFormat(QStringLiteral("@valueLabel"));
                    #else
                        //! [6]
                        // Set selection mode to slice row
                        m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow | QAbstract3DGraph::SelectionSlice);
                    
                        //! [6]
                    #endif
                    
                        //! [7]
                        // Set theme
                        m_graph->activeTheme()->setType(Q3DTheme::ThemeDigia);
                    
                        // Set font
                        m_graph->activeTheme()->setFont(QFont("Impact", 20));
                    
                        // Set preset camera position
                        m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
                        //! [7]
                    }
                    
                    GraphDataGenerator::~GraphDataGenerator()
                    {
                        if (m_dataTimer) {
                            m_dataTimer->stop();
                            delete m_dataTimer;
                        }
                        delete m_graph;
                    }
                    
                    void GraphDataGenerator::start()
                    {
                    #ifndef USE_STATIC_DATA
                        m_dataTimer = new QTimer();
                        m_dataTimer->setTimerType(Qt::CoarseTimer);
                        QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::addRow);
                        m_dataTimer->start(0);
                        m_tableWidget->setFixedWidth(m_graph->width());
                    #else
                        //! [8]
                        setupModel();
                    
                        // Table needs to be shown before the size of its headers can be accurately obtained,
                        // so we postpone it a bit
                        m_dataTimer = new QTimer();
                        m_dataTimer->setSingleShot(true);
                        QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::fixTableSize);
                        m_dataTimer->start(0);
                        //! [8]
                    #endif
                    }
                    
                    void GraphDataGenerator::setupModel()
                    {
                        //! [9]
                        // Set up row and column names
                        QStringList days;
                        days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
                        QStringList weeks;
                        weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
                    
                        // Set up data         Mon  Tue  Wed  Thu  Fri  Sat  Sun
                        float hours[5][7] = {{2.0f, 1.0f, 3.0f, 0.2f, 1.0f, 5.0f, 10.0f},     // week 1
                                             {0.5f, 1.0f, 3.0f, 1.0f, 2.0f, 2.0f, 3.0f},      // week 2
                                             {1.0f, 1.0f, 2.0f, 1.0f, 4.0f, 4.0f, 4.0f},      // week 3
                                             {0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.3f},      // week 4
                                             {3.0f, 3.0f, 6.0f, 2.0f, 2.0f, 1.0f, 1.0f}};     // week 5
                        //! [9]
                    
                        // Add labels
                        //! [10]
                        m_graph->rowAxis()->setTitle("Week of year");
                        m_graph->rowAxis()->setTitleVisible(true);
                        m_graph->columnAxis()->setTitle("Day of week");
                        m_graph->columnAxis()->setTitleVisible(true);
                        m_graph->valueAxis()->setTitle("Hours spent on the Internet");
                        m_graph->valueAxis()->setTitleVisible(true);
                        m_graph->valueAxis()->setLabelFormat("%.1f h");
                        //! [10]
                    
                        //! [11]
                        m_tableWidget->setRowCount(5);
                        m_tableWidget->setColumnCount(7);
                        m_tableWidget->setHorizontalHeaderLabels(days);
                        m_tableWidget->setVerticalHeaderLabels(weeks);
                        m_tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                        m_tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                        m_tableWidget->setCurrentCell(-1, -1);
                        m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
                        //! [11]
                    
                        //! [12]
                        for (int week = 0; week < weeks.size(); week++) {
                            for (int day = 0; day < days.size(); day++) {
                                QModelIndex index = m_tableWidget->model()->index(week, day);
                                m_tableWidget->model()->setData(index, hours[week][day]);
                            }
                        }
                        //! [12]
                    }
                    
                    void GraphDataGenerator::addRow()
                    {
                        m_tableWidget->model()->insertRow(0);
                        if (m_tableWidget->model()->rowCount() > m_rowCount)
                            m_tableWidget->model()->removeRow(m_rowCount);
                        for (int i = 0; i < m_columnCount; i++) {
                            QModelIndex index = m_tableWidget->model()->index(0, i);
                            m_tableWidget->model()->setData(index,
                                ((float)i / (float)m_columnCount) / 2.0f +
                                                            (float)(QRandomGenerator::global()->bounded(30)) / 100.0f);
                        }
                        m_tableWidget->resizeColumnsToContents();
                    }
                    
                    //! [13]
                    void GraphDataGenerator::selectFromTable(const QPoint &selection)
                    {
                        m_tableWidget->setFocus();
                        m_tableWidget->setCurrentCell(selection.x(), selection.y());
                    }
                    //! [13]
                    
                    //! [14]
                    void GraphDataGenerator::selectedFromTable(int currentRow, int currentColumn,
                                                               int previousRow, int previousColumn)
                    {
                        Q_UNUSED(previousRow)
                        Q_UNUSED(previousColumn)
                        m_graph->seriesList().at(0)->setSelectedBar(QPoint(currentRow, currentColumn));
                    }
                    //! [14]
                    
                    void GraphDataGenerator::fixTableSize()
                    {
                        int width = m_tableWidget->horizontalHeader()->length();
                        width += m_tableWidget->verticalHeader()->width();
                        m_tableWidget->setFixedWidth(width + 2);
                        int height = m_tableWidget->verticalHeader()->length();
                        height += m_tableWidget->horizontalHeader()->height();
                        m_tableWidget->setFixedHeight(height + 2);
                    }
                    
                    

                    But it says:unknown type name 'QBar3DSeries, QItemModelBarDataProxy, ...

                    Why? I did it like you said :)

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 25 May 2020, 11:57 last edited by
                    #9

                    @HenrikSt-0 said in Starting App from other class:

                    Why?

                    Did you add the needed includes in your MainWindow also? Like

                    #include <QtDataVisualization/qbar3dseries.h>
                    

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    ? 1 Reply Last reply 25 May 2020, 12:03
                    0
                    • J jsulm
                      25 May 2020, 11:57

                      @HenrikSt-0 said in Starting App from other class:

                      Why?

                      Did you add the needed includes in your MainWindow also? Like

                      #include <QtDataVisualization/qbar3dseries.h>
                      
                      ? Offline
                      ? Offline
                      A Former User
                      wrote on 25 May 2020, 12:03 last edited by
                      #10

                      @jsulm Yes, I have added them there

                      J 1 Reply Last reply 25 May 2020, 12:13
                      0
                      • ? A Former User
                        25 May 2020, 12:03

                        @jsulm Yes, I have added them there

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 25 May 2020, 12:13 last edited by
                        #11

                        @HenrikSt-0 Can you show the pro file from that example?

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        ? 1 Reply Last reply 25 May 2020, 12:16
                        0
                        • J jsulm
                          25 May 2020, 12:13

                          @HenrikSt-0 Can you show the pro file from that example?

                          ? Offline
                          ? Offline
                          A Former User
                          wrote on 25 May 2020, 12:16 last edited by
                          #12

                          @jsulm Yes of course!
                          .pro file

                          android|ios|winrt {
                              error( "This example is not supported for android, ios, or winrt." )
                          }
                          
                          !include( ../examples.pri ) {
                              error( "Couldn't find the examples.pri file!" )
                          }
                          
                          SOURCES += main.cpp
                          
                          QT += widgets
                          requires(qtConfig(tablewidget))
                          
                          OTHER_FILES += doc/src/* \
                                         doc/images/*
                          
                          

                          .pri file

                          INCLUDEPATH += ../../../include
                          
                          LIBS += -L$$OUT_PWD/../../../lib
                          
                          TEMPLATE = app
                          
                          QT += datavisualization
                          
                          contains(TARGET, qml.*) {
                              QT += qml quick
                          }
                          
                          target.path = $$[QT_INSTALL_EXAMPLES]/datavisualization/$$TARGET
                          INSTALLS += target
                          
                          

                          QT += datavisualization i have added to my pro file

                          J 1 Reply Last reply 25 May 2020, 12:18
                          0
                          • ? A Former User
                            25 May 2020, 12:16

                            @jsulm Yes of course!
                            .pro file

                            android|ios|winrt {
                                error( "This example is not supported for android, ios, or winrt." )
                            }
                            
                            !include( ../examples.pri ) {
                                error( "Couldn't find the examples.pri file!" )
                            }
                            
                            SOURCES += main.cpp
                            
                            QT += widgets
                            requires(qtConfig(tablewidget))
                            
                            OTHER_FILES += doc/src/* \
                                           doc/images/*
                            
                            

                            .pri file

                            INCLUDEPATH += ../../../include
                            
                            LIBS += -L$$OUT_PWD/../../../lib
                            
                            TEMPLATE = app
                            
                            QT += datavisualization
                            
                            contains(TARGET, qml.*) {
                                QT += qml quick
                            }
                            
                            target.path = $$[QT_INSTALL_EXAMPLES]/datavisualization/$$TARGET
                            INSTALLS += target
                            
                            

                            QT += datavisualization i have added to my pro file

                            J Offline
                            J Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on 25 May 2020, 12:18 last edited by
                            #13

                            @HenrikSt-0 Change the includes like this:

                            #include <QBar3DSeries>
                            

                            Add

                            QT += datavisualization
                            

                            to your pro file.

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            ? 1 Reply Last reply 25 May 2020, 12:38
                            1
                            • J jsulm
                              25 May 2020, 12:18

                              @HenrikSt-0 Change the includes like this:

                              #include <QBar3DSeries>
                              

                              Add

                              QT += datavisualization
                              

                              to your pro file.

                              ? Offline
                              ? Offline
                              A Former User
                              wrote on 25 May 2020, 12:38 last edited by
                              #14

                              @jsulm Yes, I did that..
                              But GraphDataGenerator also is an unknown type name...
                              Crazy..
                              This are my #includes in the mainwindow class:

                              #include <QBar3DSeries>
                              #include <Q3DBars>
                              #include <QCategory3DAxis>
                              #include <QItemModelBarDataProxy>
                              #include <QValue3DAxis>
                              #include <Q3DCamera>
                              #include <Q3DTheme>
                              

                              In the GraphDataGenerator class is everything fine and there are no #includes...

                              J 1 Reply Last reply 25 May 2020, 12:54
                              0
                              • S Offline
                                S Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on 25 May 2020, 12:53 last edited by
                                #15

                                One thing>

                                widget.show();
                                generator.start();

                                Both are local variables and will be destroyed at the end of your method so they won't have any effect.

                                Beside that, it looks like you did not copy the classes that are currently not compiling in your project.

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                1
                                • ? A Former User
                                  25 May 2020, 12:38

                                  @jsulm Yes, I did that..
                                  But GraphDataGenerator also is an unknown type name...
                                  Crazy..
                                  This are my #includes in the mainwindow class:

                                  #include <QBar3DSeries>
                                  #include <Q3DBars>
                                  #include <QCategory3DAxis>
                                  #include <QItemModelBarDataProxy>
                                  #include <QValue3DAxis>
                                  #include <Q3DCamera>
                                  #include <Q3DTheme>
                                  

                                  In the GraphDataGenerator class is everything fine and there are no #includes...

                                  J Offline
                                  J Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on 25 May 2020, 12:54 last edited by
                                  #16

                                  @HenrikSt-0 said in Starting App from other class:

                                  GraphDataGenerator

                                  It is the class in the example - did you add it to your project?

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0

                                  6/16

                                  25 May 2020, 11:42

                                  10 unread
                                  • Login

                                  • Login or register to search.
                                  6 out of 16
                                  • First post
                                    6/16
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • Users
                                  • Groups
                                  • Search
                                  • Get Qt Extensions
                                  • Unsolved