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.
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 ¢er, 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 ¢er, 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
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.
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.
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 ¢er, double radius ) const; |
Ich weiss es nicht, ob ich richtig liege oder nicht? In QT Welt bin noch einen Einsteiger
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.
@ 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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.