Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Qtwidget: Text ausgeben
Forum Updated to NodeBB v4.3 + New Features

Qtwidget: Text ausgeben

Scheduled Pinned Locked Moved Solved German
7 Posts 2 Posters 1.9k Views 1 Watching
  • 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.
  • K-StrK Offline
    K-StrK Offline
    K-Str
    wrote on last edited by
    #1

    Hallo,
    ich habe in der Vergangenheit schon sehr gute Tipps bekommen.
    Nun stehe ich vor dem Problem, dass ich mit QtCreator ein Widget erstellt habe.
    Jertzt möchte ich Messwerte, die von meiner Application ermittelt werden im Widget ausgeben.
    Dazu habe ich einige Fragen:

    1. Welches Item muß dafür erstellt werden (qlabel?)?
    2. Wie kann ich das per Programm verändern? Goto Slot?

    Vielen Dank für hilfreiche Tipps.
    Gruß

    jsulmJ 1 Reply Last reply
    0
    • K-StrK K-Str

      Hallo,
      ich habe in der Vergangenheit schon sehr gute Tipps bekommen.
      Nun stehe ich vor dem Problem, dass ich mit QtCreator ein Widget erstellt habe.
      Jertzt möchte ich Messwerte, die von meiner Application ermittelt werden im Widget ausgeben.
      Dazu habe ich einige Fragen:

      1. Welches Item muß dafür erstellt werden (qlabel?)?
      2. Wie kann ich das per Programm verändern? Goto Slot?

      Vielen Dank für hilfreiche Tipps.
      Gruß

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @K-Str

      1. Für Text gibt es Widgets in Qt (QTextEdit, QPlainTextEdit), QLabel kann auch benutzt werden.
      2. Die Frage ist nicht klar. Um Text zu setzen haben die oben genannten Widgets Methoden (wie setText()). Diese Methoden sind Slots und können somit mit Signalen verbunden werden. Oder man schreibt eigene Slots und ruft diese Methoden dort auf.

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

      1 Reply Last reply
      1
      • K-StrK Offline
        K-StrK Offline
        K-Str
        wrote on last edited by K-Str
        #3

        @jsulm ,
        Danks für Deine Antwort.
        Ich benutze den QT-Creator 4.8.2 mit Qt 5.11.3 auf einem Raspberry PI3.
        Ich verwende QLabel.
        Da wird mir aber Element und keine Methode mit ui->.. angeboten.
        Für die Codeeingabe ui-> kommt aber der Hinweis:

        invalid use of member 'ui' in static member funktion
        expected unqualified-id
        

        Es sollten mir aber alle Elemente die ich modifizieren kann angeboten werden.
        Mach ich da was falsch?

        jsulmJ 1 Reply Last reply
        0
        • K-StrK K-Str

          @jsulm ,
          Danks für Deine Antwort.
          Ich benutze den QT-Creator 4.8.2 mit Qt 5.11.3 auf einem Raspberry PI3.
          Ich verwende QLabel.
          Da wird mir aber Element und keine Methode mit ui->.. angeboten.
          Für die Codeeingabe ui-> kommt aber der Hinweis:

          invalid use of member 'ui' in static member funktion
          expected unqualified-id
          

          Es sollten mir aber alle Elemente die ich modifizieren kann angeboten werden.
          Mach ich da was falsch?

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @K-Str "invalid use of member 'ui' in static member funktion" - ui ist nicht statisch und kann somit nicht in statischen Methoden benutzt werden. Kannst du zeigen was du eigentlich versuchst zu machen?

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

          1 Reply Last reply
          0
          • K-StrK Offline
            K-StrK Offline
            K-Str
            wrote on last edited by
            #5

            @jsulm ,
            danke für Deine Antwort.
            In meiner Applikation habe ich einen Timer eingerichtet, der jede Sekunde Messwerte von einem Sensor ausliest.
            Dann sollen die Sensordaten in einem Label im Widget ausgegeben werden.
            Hier die Codes:
            main.cpp

            #include "mainwindow.h"
            #include <time.h>
            #include <QApplication>
            #include <iostream>
            #include <unistd.h>
            #include <math.h>
            #include "adxl345class.h"
            #include <signal.h>
            #include <stdlib.h>
            
            using namespace std;
            timer_t SensorTimer;
            timer_t MotorTimer;
            static int count1 = 0;
            static int count2 = 0;
            struct sigaction sa;
            
            Adxl345Class adxl;
            
            
            
            /* Timer erzeugen und starten
             * Timerid: die zurueckgegebene ID des Timers
             * sek: Wartezeit Sekundenanteil
             * msek: Wartezeit Millisekundenanteil
             */
            void start_timer(timer_t *Timerid, int sek, int msek)
              {
              struct itimerspec timer;
            
              timer.it_value.tv_sec = sek;
              timer.it_value.tv_nsec = msek * 1000000;
              timer.it_interval.tv_sec = sek;
              timer.it_interval.tv_nsec = msek * 1000000;
            
              timer_create (CLOCK_REALTIME, NULL, Timerid);
              timer_settime (*Timerid, 0, &timer, NULL);
              printf("Timer gestartet, ID: 0x%lx\n", (long) *Timerid);
              }
            
            /* Signalhandler für alle Timer
             * Unterscheidung der Timer anhand von tidp
             */
            void timer_callback(int sig, siginfo_t *si, void *uc)
              {
              timer_t *tidp;
               tidp = &si->si_value.sival_ptr;
              if (*tidp == SensorTimer)
                adxl.readADXL345();
                MainWindow::SensordatenAnzeigen();
                //    cout << "X = " << adxl.rx << "; Y = " << adxl.ry << "; Z = " << adxl.rz << endl;
              if (*tidp == MotorTimer)
                printf(", Count 2: %d\n",count2++);
              }
            
            void TimerInit(void)
            {
            /* cllback-Handler installieren */
                memset(&sa, 0, sizeof (sa));
                sa.sa_flags = SA_SIGINFO;
                sa.sa_sigaction = timer_callback;
                sigemptyset(&sa.sa_mask);
                if (sigaction(SIGALRM, &sa, NULL) == -1)
                perror("sigaction");
            
            /* timer starten */
                start_timer(&SensorTimer,1,0);
                start_timer(&MotorTimer,0,500);
            }
            
            int main(int argc, char *argv[])
            {
                TimerInit();
                QApplication a(argc, argv);
                MainWindow w;
                w.showFullScreen();
                adxl.initADXL345();
            
                return a.exec();
            }
            

            mainwindow.cpp:

            #include "mainwindow.h"
            #include "ui_mainwindow.h"
            #include <QDebug>
            
            MainWindow::MainWindow(QWidget *parent) :
                QMainWindow(parent),
                ui(new Ui::MainWindow)
            {
                ui->setupUi(this);
            }
            
            MainWindow::~MainWindow()
            {
                delete ui;
            }
            
            void MainWindow::SensordatenAnzeigen()
            {
                ui->ValDatum->setText("Datum!");
            }
            
            void MainWindow::on_EinAusButton_clicked()
            {
                qDebug() << "Ein/Aus gedrueckt";
            }
            
            void MainWindow::on_MotAnAusButton_clicked()
            {
                qDebug() << "Motor An/Aus gedrueckt";
            }
            

            mainwindow.h

            #ifndef MAINWINDOW_H
            #define MAINWINDOW_H
            
            #include <QMainWindow>
            
            namespace Ui {
            class MainWindow;
            }
            
            class MainWindow : public QMainWindow
            {
                Q_OBJECT
            
            public:
                explicit MainWindow(QWidget *parent = nullptr);
                ~MainWindow();
                void SensordatenAnzeigen(void);
            
            private slots:
                void on_EinAusButton_clicked();
            
                void on_MotAnAusButton_clicked();
            
            private:
                Ui::MainWindow *ui;
            };
            
            #endif // MAINWINDOW_H
            
            

            Wenn ich das module SensordatenAnzeigen() so definiere, dann bekomme ich eine Fehler
            *error: cannot call member function ‘void MainWindow::SensordatenAnzeigen()’ without object
            wenn ich es in main.cpp aufrufe.
            Wenn ich es in mainwindow.h als

            static void SensordatenAnzeigen()
            

            definiere, dann bekomme ich den beschriebenen Fehler.
            Ich weis da hebe ich einiges durcheinander gebracht.

            jsulmJ 1 Reply Last reply
            0
            • K-StrK K-Str

              @jsulm ,
              danke für Deine Antwort.
              In meiner Applikation habe ich einen Timer eingerichtet, der jede Sekunde Messwerte von einem Sensor ausliest.
              Dann sollen die Sensordaten in einem Label im Widget ausgegeben werden.
              Hier die Codes:
              main.cpp

              #include "mainwindow.h"
              #include <time.h>
              #include <QApplication>
              #include <iostream>
              #include <unistd.h>
              #include <math.h>
              #include "adxl345class.h"
              #include <signal.h>
              #include <stdlib.h>
              
              using namespace std;
              timer_t SensorTimer;
              timer_t MotorTimer;
              static int count1 = 0;
              static int count2 = 0;
              struct sigaction sa;
              
              Adxl345Class adxl;
              
              
              
              /* Timer erzeugen und starten
               * Timerid: die zurueckgegebene ID des Timers
               * sek: Wartezeit Sekundenanteil
               * msek: Wartezeit Millisekundenanteil
               */
              void start_timer(timer_t *Timerid, int sek, int msek)
                {
                struct itimerspec timer;
              
                timer.it_value.tv_sec = sek;
                timer.it_value.tv_nsec = msek * 1000000;
                timer.it_interval.tv_sec = sek;
                timer.it_interval.tv_nsec = msek * 1000000;
              
                timer_create (CLOCK_REALTIME, NULL, Timerid);
                timer_settime (*Timerid, 0, &timer, NULL);
                printf("Timer gestartet, ID: 0x%lx\n", (long) *Timerid);
                }
              
              /* Signalhandler für alle Timer
               * Unterscheidung der Timer anhand von tidp
               */
              void timer_callback(int sig, siginfo_t *si, void *uc)
                {
                timer_t *tidp;
                 tidp = &si->si_value.sival_ptr;
                if (*tidp == SensorTimer)
                  adxl.readADXL345();
                  MainWindow::SensordatenAnzeigen();
                  //    cout << "X = " << adxl.rx << "; Y = " << adxl.ry << "; Z = " << adxl.rz << endl;
                if (*tidp == MotorTimer)
                  printf(", Count 2: %d\n",count2++);
                }
              
              void TimerInit(void)
              {
              /* cllback-Handler installieren */
                  memset(&sa, 0, sizeof (sa));
                  sa.sa_flags = SA_SIGINFO;
                  sa.sa_sigaction = timer_callback;
                  sigemptyset(&sa.sa_mask);
                  if (sigaction(SIGALRM, &sa, NULL) == -1)
                  perror("sigaction");
              
              /* timer starten */
                  start_timer(&SensorTimer,1,0);
                  start_timer(&MotorTimer,0,500);
              }
              
              int main(int argc, char *argv[])
              {
                  TimerInit();
                  QApplication a(argc, argv);
                  MainWindow w;
                  w.showFullScreen();
                  adxl.initADXL345();
              
                  return a.exec();
              }
              

              mainwindow.cpp:

              #include "mainwindow.h"
              #include "ui_mainwindow.h"
              #include <QDebug>
              
              MainWindow::MainWindow(QWidget *parent) :
                  QMainWindow(parent),
                  ui(new Ui::MainWindow)
              {
                  ui->setupUi(this);
              }
              
              MainWindow::~MainWindow()
              {
                  delete ui;
              }
              
              void MainWindow::SensordatenAnzeigen()
              {
                  ui->ValDatum->setText("Datum!");
              }
              
              void MainWindow::on_EinAusButton_clicked()
              {
                  qDebug() << "Ein/Aus gedrueckt";
              }
              
              void MainWindow::on_MotAnAusButton_clicked()
              {
                  qDebug() << "Motor An/Aus gedrueckt";
              }
              

              mainwindow.h

              #ifndef MAINWINDOW_H
              #define MAINWINDOW_H
              
              #include <QMainWindow>
              
              namespace Ui {
              class MainWindow;
              }
              
              class MainWindow : public QMainWindow
              {
                  Q_OBJECT
              
              public:
                  explicit MainWindow(QWidget *parent = nullptr);
                  ~MainWindow();
                  void SensordatenAnzeigen(void);
              
              private slots:
                  void on_EinAusButton_clicked();
              
                  void on_MotAnAusButton_clicked();
              
              private:
                  Ui::MainWindow *ui;
              };
              
              #endif // MAINWINDOW_H
              
              

              Wenn ich das module SensordatenAnzeigen() so definiere, dann bekomme ich eine Fehler
              *error: cannot call member function ‘void MainWindow::SensordatenAnzeigen()’ without object
              wenn ich es in main.cpp aufrufe.
              Wenn ich es in mainwindow.h als

              static void SensordatenAnzeigen()
              

              definiere, dann bekomme ich den beschriebenen Fehler.
              Ich weis da hebe ich einiges durcheinander gebracht.

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by jsulm
              #6

              @K-Str Übergebe einfach einen Zeiger auf MainWindow an timer_callback.
              Außerdem hat Qt QTimer...

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

              1 Reply Last reply
              0
              • K-StrK Offline
                K-StrK Offline
                K-Str
                wrote on last edited by
                #7

                @jsulm ,
                danke für Deinen Tipp.
                Letztendlich habe ich es mit QTimer hingekriegt.
                Super Hilfe!!!

                1 Reply Last reply
                0

                • Login

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