QWTDial und Label

Alles rund um die Programmierung mit Qt
Antworten
galilio
Beiträge: 42
Registriert: 19. November 2013 08:16

QWTDial und Label

Beitrag von galilio »

Qwt_Dial mit Label
Qwt_Dial mit Label
Test_dial_2.png (9.01 KiB) 5513 mal betrachtet
QWT_Dial ohne Label
QWT_Dial ohne Label
Test_dial.png (7.56 KiB) 5513 mal betrachtet
Hallo alle zusammen,

ich versuche seit 2 Tage einen Konzept zu erarbeiten wie ich in einen QWtDial einen Label mit Text reinzuplatzieren.
Das Label in Qwt_Dial zu platzieren ist kein Problem, wenn ich kein Grid Layout angewendet habe.

Ich möchte in dem Dial einen text zb. (Km/h) schreiben und es muss so flexible sein mit der grosse des Dialogs.
Das heisst wenn die grösse der Dialog sich ändert muss auch der grosse des textes anpassen.

Mir ehrlich gesagt fehlt jede Plan wie ich das mit Qt designer realisieren kann.

Für jede Hilfe bin ich sehr dankbar.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Re: QWTDial und Label

Beitrag von Uwe »

Dein Code scheint ja ohnehin auf der Klasse SpeedoMeter aus dem dials example zu basieren. Also alles was Du machen musst ist in SpeedoMeter::drawScaleContents den Font in abhängigkeit vom Radius zu wählen ( oder besser mit einem Skalierungsfaktor zeichnen ).

Der Designer bringt in dem Zusammenhang gar nichts - das musst Du in C++ machen.

Uwe
galilio
Beiträge: 42
Registriert: 19. November 2013 08:16

Re: QWTDial und Label

Beitrag von galilio »

Hallo Uwe,

Danke für deine Antwort.
Ja das stimmt meine Vorhaben ist auf die Klasse Speedmotor basiert.

void CDial_Test::drawScaleContents( QPainter *painter, const QPointF &center, double radius ) const
{
QRectF rect( 0, 0, 2.0 * radius, 2 * radius - 10.0 );
rect.moveCenter( center );

const QColor color = palette().color( QPalette::Text );
painter->setPen( color );

const int flags = Qt::AlignBottom | Qt::AlignHCenter;
painter->drawText( rect, flags, d_label );
}


Mir ist nicht ganz klar wie ich das skalieren soll, wenn die Grosse sich ändert .
1)-Das Label ist immer in der richtige Stelle aber wenn der Dialog gross wird, ist der Text sehr klein.
2)Wie kann ich diese Änderung in meine Dialog(in der andere GUI ) übertragen?
Anbei ist eine Muster von meine Gui.
Das GUI wurde mit unterschiedliche Layout (Grid,Horizontal,Vertikal Layout ) gemacht.
Zuletzt geändert von galilio am 21. November 2013 11:10, insgesamt 1-mal geändert.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Re: QWTDial und Label

Beitrag von Uwe »

Einfach den painter mit QPainter::scale() in Abhängigkeit vom Parameter radius manipulieren.

Uwe
galilio
Beiträge: 42
Registriert: 19. November 2013 08:16

Re: QWTDial und Label

Beitrag von galilio »

Noch einen Frage Uwe und sorry wenn es banal ist.
Wie verbinde ich denn diese ànderung in der Haupt GUI .

Genauer gefragt wie verbinde ich meine Änderung mit (ui.setupUi(this); :oops: )

Danke und sorry
galilio
Beiträge: 42
Registriert: 19. November 2013 08:16

Re: QWTDial und Label

Beitrag von galilio »

Auf eine Hinweis hätte ich mich gefreut.
Ich bin halt neue in Welt der QT und bin sehr dankbar für jeden Tipps
Danke in voraus
galilio
Beiträge: 42
Registriert: 19. November 2013 08:16

Re: QWTDial und Label

Beitrag von galilio »

Hallo Uwe,
ich bin einfach in eine Kleinigkeit bezweifelt und komme einfach nicht weiter.
Ich will einfach anhand dieses Beispielprogramm einen virtuelle vererbung duch einen QLabel durchführen.
Meine main.cpp sieht so aus:

Code: Alles auswählen

#include "test.h"
#include <QtGui/QApplication>
#include<QVBoxLayout>
#include<QKeyEvent>
#include "MyLabel.h"
int main(int argc, char *argv[])
{
        QApplication a(argc, argv);

        test w;

        w.show();

        //label->show();
        return a.exec();
}
-->testKlasse sieht so aus:
tesklass.h

Code: Alles auswählen

#ifndef TEST_H
#define TEST_H

#include <QtGui/QMainWindow>
#include "ui_test.h"

class MyLabel;

class test : public QMainWindow
{
        Q_OBJECT

public:
        test(QWidget *parent = 0, Qt::WFlags flags = 0);
        ~test();

private:
        Ui::testClass ui;
};

#endif // TEST_H
-->.cpp file

Code: Alles auswählen

#include "test.h"
#include "mylabel.h"
#include <QVBoxLayout>

test::test(QWidget *parent, Qt::WFlags flags)
        : QMainWindow(parent, flags)
{
        ui.setupUi(this);
        MyLabel myLabel("TestLabel");
        //myLabel("TestLabel") = new QLabel;


        QVBoxLayout *l= new QVBoxLayout;
        l->addWidget(myLabel);// das ist quatsch ............
 
 
        //l->addWidget(ui);*/
        //myLabel->addWidget(
        /*QVBoxLayout *layout;
        layout = new QVBoxLayout();
        layout->addWidget(myLabel);*/
}

test::~test()
{

}
--> mylabel.h

Code: Alles auswählen

#pragma once
#include <QLabel>

class MyLabel: public QLabel 
{
public:
        explicit MyLabel(QWidget * parent = 0, Qt::WindowFlags f = 0);
        explicit MyLabel(const QString & text, QWidget * parent = 0, 
Qt::WindowFlags f = 0);
        ~MyLabel(void);
protected:
        virtual void keyPressEvent(QKeyEvent *ev);

};
-->MyLabel.cpp

Code: Alles auswählen

#include "MyLabel.h"
#include<QKeyEvent>

MyLabel::MyLabel(QWidget *parent, Qt::WindowFlags f)
 : QLabel(parent, f) 
{
}


MyLabel::MyLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)
 : QLabel(text, parent, f)
 {
 }

 void MyLabel::keyPressEvent(QKeyEvent * event)
 {
         if (event->key() == Qt::Key_Delete)
         clear();
         else
         QLabel::keyPressEvent(event);
 }

MyLabel::~MyLabel(void)
{
}

Meine Frage ist wie kann ich das label von Mylabel in der (ui.setupUi(this)) einfügen ........?
Herzlichen Dank
Antworten