Forum: PC-Programmierung Visual Studio 2008 und QT


von Maxim (Gast)


Angehängte Dateien:

Lesenswert?

hallo alle zusammen,

Entwicklungumgebung: Visual Studio 2008 C++ mit QT 4.7

Ich habe folgenden Problem(Seh bitte Anhang):

Ich habe einen HauptGui, die ich mit Gridlayout erstellt habe (QT 
Designer).
Ich habe dazu noch einen andere Teil_GUI, die ich hardcodiert habe.

Ich möchte jetzt der Teil_GUI in der Hauptgui einfügen.
Ich brauche nur einen Impuls, wie ich das machen kann.


Danke in Voraus.

von pks (Gast)


Lesenswert?

layout->addWidget(row, col);

von Rolf Magnus (Gast)


Lesenswert?


von Maxim (Gast)


Lesenswert?

Hallo und danke für die Antwort.
Die beide Layouts (TeilGUI und HauptGui)sind in unterschiedlich klassen 
erstellt.

TeilGUI hardcodiert

-->HeaderFile
1
class dial: public QwtDial
2
{
3
public:
4
  dial(QWidget *parent = NULL);
5
  void setLabel(const QString &);
6
  QString label() const;
7
  ~dial(void);
8
9
protected:
10
  void virtual paintEvent(QPaintEvent *e);
11
public:
12
    virtual void drawScaleContents( QPainter *painter,
13
        const QPointF &center, double radius ) const;
14
//
15
public:
16
  QwtDial *Dial;
17
    QString d_label;
18
};

-->SourceFile
1
dial::dial(QWidget *parent ):QwtDial(parent), d_label(" *1000 rpm")
2
{
3
4
}
5
6
dial::~dial(void)
7
{
8
9
}
10
void dial::paintEvent(QPaintEvent *e)
11
{
12
  QwtDial *mydial = NULL;
13
  if(mydial->value() == 0)
14
  {
15
    QPalette p = this->palette();
16
    p.setColor(QPalette::WindowText, Qt::green);
17
    this->setPalette(p);
18
  }
19
  QwtDial::paintEvent(e);
20
}
21
void dial::setLabel(const QString &label)
22
{
23
  d_label = label;
24
}
25
26
QString dial::label() const
27
{
28
  return d_label;
29
}
30
31
void dial::drawScaleContents( QPainter *painter,
32
    const QPointF &center, double radius ) const
33
{
34
    QRectF rect( 0, 0, 2.0 * radius, 2 * radius - 10.0 );
35
    rect.moveCenter( center );
36
37
    const QColor color = palette().color( QPalette::Text );
38
  // int side = qMin(width(), height());
39
  //painter->scale(side/177,side/177);
40
    painter->setPen( color );
41
42
    const int flags = Qt::AlignBottom | Qt::AlignHCenter;
43
    painter->drawText( rect, flags, d_label );
44
}

       und
HauptGui mit QT Designer:
 -->Header File:
1
class simple_qwtDial : public QMainWindow
2
{
3
  Q_OBJECT
4
5
public:
6
  simple_qwtDial(QWidget *parent = 0, Qt::WFlags flags = 0);
7
  ~simple_qwtDial();
8
9
private:
10
  Ui::simple_qwtDialClass ui;
11
};
12
¨
-->Source Files:
1
simple_qwtDial::simple_qwtDial(QWidget *parent, Qt::WFlags flags)
2
  : QMainWindow(parent, flags)
3
{
4
  ui.setupUi(this);
5
    QGridLayout *layout = new QGridLayout;
6
    layout->setSpacing( 5 );
7
    layout->setMargin( 0 );
8
9
  .....
10
}

Danke in Voraus

von pks (Gast)


Lesenswert?

Ein paar allgemeine Anmerkungen:
- Der Titel passt eigentlich nicht zur Fragestellung.
- Für Code bitte entsprechende tags verwenden.

Zur Frage:
Es wäre einfacher, wenn Du einfach mal Dein Projekt (gezipt) posten 
würdest...das Interpretieren Deiner codeschnipsel ist mir persönlich zu 
anstrengend.

von Rolf Magnus (Gast)


Lesenswert?

Maxim schrieb:
> Danke in Voraus

Wofür? Du hast doch gar keine Frage gestellt.

Maxim schrieb:
> QGridLayout *layout = new QGridLayout;
>     layout->setSpacing( 5 );
>     layout->setMargin( 0 );

Ich dachte, das Layout hast du schon im Designer erstellt. Wozu machst 
du dann hier noch eins? Außßerdem fehlt dem Layout ein Parent.

von Maxim (Gast)


Angehängte Dateien:

Lesenswert?

Rolf Magnus schrieb:
> Ich dachte, das Layout hast du schon im Designer erstellt. Wozu machst
> du dann hier noch eins? Außßerdem fehlt dem Layout ein Parent.

Problem ist wie folgende:
Ich habe einen Gui (Hauptgui), der mit QT Designer erstellt.

Dieses GUI (Haupgui) enthält einen QWTDial der wie in Anhang1 aussieht.
Ich möchte dieses QWTDial wie im Anhang2 erweitern.

Der Hauptgui(an denen befindet sich der QWTDial ) wurde mit Gridlayout 
erstellt und ich weiss es nicht wie soll ich das QWTDial erweitern, 
damit es wie in Anhang2 aussieht.


Um dieses Erweiterung durchzuführen habe ich gedacht ich erstelle eine 
andere Klasse, die von QWTDial erbt und dort folgende Methode 
reimplementieren:
1
void drawScaleContents( QPainter *painter,
2
        const QPointF &center, double radius ) const;

Ich weiss es nicht, ob ich richtig liege oder nicht?
In QT Welt bin noch einen Einsteiger

von nowayback (Gast)


Lesenswert?

Das ist so richtig, ich habe das auch einmal gemacht um ein Logo 
zwischen Tachohintergrund und Nadel einzublenden. Du wirst allerdings 
noch eine zusätzliche Schnittstelle (zB. weitere Funktion in der 
abgeleiteten Klasse) brauchen, um die Drehzahl zu übergeben. Vergiss 
nicht, den Tacho neu zu zeichnen, nachdem du eine neue Drezahl 
übergibst, sonst ändert sich die Anzeige nicht (sofort) - das lässt sich 
am besten gleich in der Funktion mittels repaint() oä erledigen.

von Maxim (Gast)


Lesenswert?

@ nowayback (Gast)
Ich will eigentlich nur das einen Logo in Hintergrund einsetzen.
Die Drehzahlanzeige muss Sie auch neue reimplementiert.
Eigentlich dachte ich mindesten ist eine kleine Änderung aber es scheint 
... ist mit viel Aufwand verbunden.
(hast du vielleicht einen kleinen Beispiel?)

Ich habe noch eine Frage:
Es gibt in der QWTzip(qwt-6.1.0) genau gesagt bei der Examples was 
ähnlich bei der Klasse Speedmotor:

http://qwt.sourceforge.net/class_qwt_dial.html

Wie kann ich mein Nutzen daraus machen?
Kann ich von diese Ressourcen einen DLL File daraus machen und dann die 
Implementieren der Funktion exportieren?

von Maxim (Gast)


Lesenswert?

Guten Morgen zusammen,


Problem ist gelöst.
Herzlichen Dank an alle.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.