- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 18

Thema: qt5 creator + designer: super simple graphic examples

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    ein "Widget" finde ich nicht,
    in der Sektion "Display Widgets" neben "Labels" etc. nur
    OpenGL widget
    Graphics_View widget
    QuickWidget


    das 1. und das 3. fallen weg, also bleibt hier nur Graphics_View Widget.
    Das Graphics_View widget kann ich im Designer in die Form drag-en,
    dort wird es dann in mainwindow.ui gelistet:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>474</width>
        <height>411</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <widget class="QPushButton" name="pushButton1">
        <property name="geometry">
         <rect>
          <x>180</x>
          <y>300</y>
          <width>101</width>
          <height>31</height>
         </rect>
        </property>
        <property name="text">
         <string>Quit</string>
        </property>
       </widget>
       <widget class="QGraphicsView" name="graphicsView">
        <property name="geometry">
         <rect>
          <x>10</x>
          <y>10</y>
          <width>451</width>
          <height>271</height>
         </rect>
        </property>
       </widget>
      </widget>
      <widget class="QMenuBar" name="menuBar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>474</width>
         <height>34</height>
        </rect>
       </property>
      </widget>
      <widget class="QToolBar" name="mainToolBar">
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <widget class="QStatusBar" name="statusBar"/>
      <widget class="QToolBar" name="toolBar">
       <property name="windowTitle">
        <string>toolBar</string>
       </property>
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <action name="action">
       <property name="text">
        <string/>
       </property>
      </action>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections>
      <connection>
       <sender>pushButton1</sender>
       <signal>clicked()</signal>
       <receiver>MainWindow</receiver>
       <slot>close()</slot>
       <hints>
        <hint type="sourcelabel">
         <x>234</x>
         <y>171</y>
        </hint>
        <hint type="destinationlabel">
         <x>260</x>
         <y>229</y>
        </hint>
       </hints>
      </connection>
     </connections>
    </ui>
    Der .ui file wird automatisch vom creator generiert und kann/darf auch nicht manuell geändert werden.

    Für spätere Zwecke ist es auch ganz entscheidend, dass ich alle widgets vom Designer /Creator aus in meine Form ziehen und dort platzieren, ändern, und weitere Eigenschaften (event slots) zufügen kann: daher scheiden manuell definierte widgets aus.


    Ich weiß nicht, wo ich im Designer stattdessen eine andere Canvas widget finden kann als diese.
    Falls es tatsächlich irgendwo ein "Widget" in der IDE-Liste gibt: wo ist das abgelegt?

    Das einfügen von extra libs ist auch schwierig, weil ich die immer kompliziert im .pro file mit verlinken muss, kann ich nicht deinen .cpp code als Text einfach komplett als Code in meine mainwindow.cpp mit einfügen?

    Und dann deinen Code wie anpassen, dass er mit dem Graphics_View widget zusammen funktioniert (oder einem anderen aus der Creator/Designer-Liste)?


    PS:
    hier ist nochmal der Link zu meinem qt creator project (nackte canvas plus Quit button):
    https://github.com/dsyleixa/qt_paint...r/qt_btn_paint

    Vielleicht kannst du ja mal mein Projekt downloaden/kopieren und meinen .pro file in deinen qt Creator laden...
    Geändert von HaWe (03.06.2020 um 11:35 Uhr)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Also bei mir funktionierts. Das Widget ist in der Widget-Box (links im Designer) unter Containers eingeordnet. Das dient nur als Platzhalter für das selbstdefinierte MyWidget.
    Wenn du die kurze Anleitung von mir durchführst, kommst du drauf, dass selbstdefinierte Widgets sehr wohl im Designer funktionieren. Ich wüsste auch nicht wie du dein Problem anders lösen solltest.

    designer - using custom widgets

  3. #3
    HaWe
    Gast
    ah, nicht unter DisplayWidgets, sondern unter Containers - ok, danke, habe es gefunden.
    Habe auch deine mywidget.h und deine mywidget.cpp Datei ins Arbeitsverzeichnis kopiert.

    wie füge ich sie jetzt dem Projekt hinzu? habe ich bisher noch nie gemacht ...
    (deshalb wäre mir ein Code direkt in mainwindow.cpp auch viel lieber)

    Und wie rufe ich dann eine Zeichen-Routine in meinem mainwindow.cpp auf?

    dadurch, dass ich nur oben mit dazu schreibe
    #include "mywidget.h"

    passiert nichts, nach Compile +Starten sieht man nur meinen Quit Button, sonst nichts (auch keinen Rahmen vom "Widget")...


    mainwindow.cpp :
    Code:
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include "mywidget.h"
    
    
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        //
        //....: hier soll der komplette Code für die paint-Funktionen rein!
        //....  evt. auch über eine lokale Funktion hier im mainwindow.cpp file
        //
    }
    
    MainWindow::~MainWindow()
    { 
        delete ui;
    }
    
    
    
    void MainWindow::on_pushButton1_clicked()
    { 
        QCoreApplication::quit();
    }
    Geändert von HaWe (03.06.2020 um 13:00 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Für mein Beispiel ist kein händisches #include notwendig. Schau rechts im Objekt-Fenster, ob das Widget von der Klasse MyWidget ist. Wenn nicht, hat was mit dem Platzhalter-Zeugs nicht funktioniert (Rechtsklick ins Widget im Designer). Wenn's geklappt hat findest du in der .pro-Datei den Eintrag mywidget.h unter Headers und in der .ui-Datei steht der Eintrag <widget class="MyWidget" name="widget" native="true">.

  5. #5
    HaWe
    Gast
    hm - kapier ich nicht, was ich machen soll. Per Rechtsklick ins Widget: da finde ich nichts.
    Kannst du mir das komplette Projekt mit allen notwendigen Dateien und Einstellungen mal hochladen?

    Ist das mit den extra cpp und h files denn auch unbedingt nötig?
    ich wollte eigentlich alles komplett in mainwindow.cpp verfügbar haben...

    PS,
    insbesondere die aktuelle Malfunktion muss unbedingt in mainwindow.cpp programmiert werden können, nicht in einem externen file (mywidget etc.)

    Und gibt es keine "eingebaute" canvas-widget für qpainter, muss man das wirklich unbedingt so kompliziert selber schreiben? Ein fertiges widget kann man ja einfach in die Form ziehen, ohne weitere Schreiberei...
    Geändert von HaWe (03.06.2020 um 13:26 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    mainwindow.ui
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>474</width>
        <height>411</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <widget class="QPushButton" name="pushButton">
        <property name="geometry">
         <rect>
          <x>180</x>
          <y>300</y>
          <width>101</width>
          <height>31</height>
         </rect>
        </property>
        <property name="text">
         <string>Quit</string>
        </property>
       </widget>
       <widget class="MyWidget" name="widget" native="true">
        <property name="geometry">
         <rect>
          <x>10</x>
          <y>10</y>
          <width>451</width>
          <height>271</height>
         </rect>
        </property>
       </widget>
      </widget>
      <widget class="QMenuBar" name="menuBar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>474</width>
         <height>21</height>
        </rect>
       </property>
      </widget>
      <widget class="QToolBar" name="mainToolBar">
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <widget class="QStatusBar" name="statusBar"/>
      <widget class="QToolBar" name="toolBar">
       <property name="windowTitle">
        <string>toolBar</string>
       </property>
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <action name="action">
       <property name="text">
        <string/>
       </property>
      </action>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <customwidgets>
      <customwidget>
       <class>MyWidget</class>
       <extends>QWidget</extends>
       <header>mywidget.h</header>
       <container>1</container>
      </customwidget>
     </customwidgets>
     <resources/>
     <connections>
      <connection>
       <sender>pushButton</sender>
       <signal>clicked()</signal>
       <receiver>MainWindow</receiver>
       <slot>close()</slot>
       <hints>
        <hint type="sourcelabel">
         <x>234</x>
         <y>171</y>
        </hint>
        <hint type="destinationlabel">
         <x>260</x>
         <y>229</y>
        </hint>
       </hints>
      </connection>
     </connections>
    </ui>
    qt_btn_paint.pro
    Code:
    #-------------------------------------------------
    #
    # Project created by QtCreator 2019-09-16T12:09:00
    #
    #-------------------------------------------------
    
    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = GUI_app
    TEMPLATE = app
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which as been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    
    SOURCES += main.cpp\
            mainwindow.cpp \
            mywidget.cpp
    
    HEADERS  += mainwindow.h \
        mywidget.h
    
    FORMS    += mainwindow.ui
    - - - Aktualisiert - - -
    Angehängte Dateien Angehängte Dateien

  7. #7
    HaWe
    Gast
    hallo,
    vielen Dank für deine Mühe!
    Es ließ sich nach ein paar kleinen Anpassungen starten (Dateidaten lagen in der Zukunft, *.pro.user musste gelöscht und neu erstellt werden) , aber leider zeigt es nur ein paar diagonale Striche, kein Rechteck, keinen Kreis.

    Außerdem müsste es so sein, dass ich alle Zeichenoperationen bedarfsgerecht vom mainwindow.cpp Hauptprogramm aus machen kann (Ort, Größe, Farbe), ggf per lokaler Funktion, an die Koordinaten etc. übergeben werden, denn was wie und wo in der Canvas gezeichnet werden soll, ist letztlich abhängig von Daten, die genau hier berechnet werden (=> Visualisierung von Mess- und Rechenergebnissen).

    In deinem Hauptprogramm ist aber überhaupt keine Zeichenfunktion für Linien, Kreise, Rechtecke etc. aufgerufen worden, wie kann man das umschreiben?
    Geändert von HaWe (03.06.2020 um 15:06 Uhr)

Ähnliche Themen

  1. Tipps Meine Software: LCD-Charakter-Creator
    Von pro-bot128 im Forum Offtopic und Community Tratsch
    Antworten: 3
    Letzter Beitrag: 20.06.2011, 11:55
  2. Ks108 und Graphic Converter
    Von carfan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 10.08.2008, 20:00
  3. Menü Creator
    Von guenter1604 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 02.08.2008, 09:12
  4. Antworten: 6
    Letzter Beitrag: 30.07.2007, 14:30
  5. PIC mit Graphic LCD
    Von chosn im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 02.06.2005, 11:20

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress