Werte an eine Funktion übergeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Werte an eine Funktion übergeben

    hallo,

    ich habe mit dem qt-designer ein Widget mit 40 DoubleSpinBoxes. Wenn der Benutzer die Felder ausfüllt, sollen die Werte an eine Funktion weitgergegeben werden, welches dann ein Bild zurück gibt.

    Ich weiss nicht ob ich das mit einem Array machen soll oder nicht, oder doch, also ich brauche einen kleinen Anfang oder ein kleines Beispiel. Dannnnkkkeee.

    lg

    nicilo
  • Hallo,

    ich vermute mal, ohne deine Anwendung zu kennen, das du mit einem Array da nicht weit kommst, du brächtest da schon eine Matrix. Jedoch könnte es da zu Performance problemen kommen.

    ich empfehle daher:

    QMap

    Das gewährleistet dir einen schnellen Zugriff auf die Elemente. Da im QDesigner alle Widgets mit Pointern genagelt sind, ist es mit QMap ultra easy und auch sehr schnell. Und an deine Funktion übergibst du einen Pointer von der Map

    Quellcode

    1. QMap<QWidget*, double> map;
    2. void meineFunktion(QMap* map);


    so long
    jd
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • hallo,

    könnt ihr mal bitte gucken??



    Quellcode

    1. #include <QtGui>
    2. #include "TabDrei.h"
    3. TabDrei::TabDrei(QWidget *parent)
    4. :QWidget(parent)
    5. {
    6. setupUi(this);
    7. }
    8. float z1=input_1->value(), z2=input_2->value(), z3=input_3->value(), z4=input_4->value(), z5=input_5->value(), z6=input_5->value(), z7=input_7->value(), z8=input_8->value(), z9=input_9->value(), z10=input_10->value();
    9. float z11=input_11->value(), z12=input_12->value(), z13=input_13->value(), z14=input_14->value(), z15=input_15->value(), z16=input_16->value(), z17=input_17->value(), z18=input_18->value(), z19=input_19->value(), z20=input_20->value();
    10. float z21=input_21->value(), z22=input_22->value(), z23=input_23->value(), z24=input_24->value(), z25=input_25->value(), z26=input_26->value(), z27=input_27->value(), z28=input_28->value(), z29=input_29->value(), z30=input_30->value();
    11. float z31=input_31->value(), z32=input_32->value(), z33=input_33->value(), z34=input_34->value(), z35=input_35->value(), z36=input_36->value(), z37=input_37->value(), z38=input_38->value(), z39=input_39->value(), z40=input_40->value();
    12. void TabDrei::check(float z1, z2, z3, z4, z5, z6, z7, z8, z9, z10 ...){
    13. //float ok[40]=false;
    14. ////bool ok1=false, ok2=false, ok3=false, ok4=false, ok5=false, ok6=false, ok7=false, ok8=false, ok9=false, ok10=false;
    15. //for(i=0; i=40; i++){
    16. //qDebug() << ok;
    17. //}
    18. //}
    19. void TabDrei::showConvError(const QString & value, const QString & inputNumber ){
    20. QMessageBox::warning(this, "Warnung", "Der von Ihnen eingegebene Wert \"" + value + "\" im Feld \"" + inputNumber + "\" ist ungueltig.");
    21. }
    Alles anzeigen



    ich weiss nicht ob das so richtig ist

    lg

    nicilo
  • Uff,

    mal ne frage ab wann bekommst du beim schreiben die Kriese? Das ist sehr unhandlich was du da machst. Der QDesigner ist für sowas nicht ausgelegt. Hier mal ein kleiner Hilfe-Punkt:

    Quellcode

    1. QMap<QWidget*, double> map;
    2. for (int i=0; i<=40; i++)
    3. map.insert(new QDoubleSpinBox, 0);


    Puff da haste 40 DoubleSpinBoxes sortiert, nun kannst du die map durchlaufen und es ist nur eine Zeile Code.

    so long
    jd
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hallo,

    Nein das brauchst du nicht, ich habe mir dein Code mal genau angeschaut ich würde das so machen: QDoubleSpinBox hat das doch schon.

    Es geht doch darum das du Werte in eine QDoubleSpinbox bekommst und aus lesen kannst oder?

    Quellcode

    1. QVector<QWidget*> vector;
    2. for (int i=0; i<=40; i++) {
    3. vector.push_back(new QDoubleSpinBox);
    4. vector[i]->setValue(0.3); // Ist sinnvoll wenn du einen Defaultwert setzen willst du kannst statt ->setValue alle Funktionen nutzen
    5. qDebug() << vector[i]->value();
    6. }


    Nun habe ich 40 QDoubleSpinBoxen mit dem Wert 0.3 initialisiert, und gebe das auch gleich wieder aus. Da es bei dir nur um QDoubleSpinBox geht reicht ein QVector aus

    Das ganze ist sehr einfach zu handhaben und man kommt nicht durch einander. Habe dich vorher falsch verstanden, des wegen QMap, was bei dir an sich keinen Sinn macht. QVector ist schneller als QList. Ist zwar bei der Datenmenge unrelevant, aber was solls.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hallo,

    mit alle funktionen meine ich, das du alles nutzen kannst (auch aus dem Vector heraus) was QDoubleSpinbox bereit stellt.

    Wo du das alles hinschreibst ist dir überlassen. Ob in den Konstruktor oder in eine private funktion und diese dann im Konstruktor ausgrufst, ist dir überlassen. Wenn du willst das beim Aufruf des Widgets die SpinBoxen initialisiert werden, musst du das in den Konstruktor packen.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von JFoX ()

  • hi,

    also ich hab das ganze mal so gemacht


    Quellcode

    1. #include <QtGui>
    2. #include "TabDrei.h"
    3. TabDrei::TabDrei(QWidget *parent)
    4. :QWidget(parent)
    5. {
    6. setupUi(this);
    7. }
    8. void TabDrei::check(){
    9. QVector<QWidget*> vector;
    10. for (int i=0; i<=40; i++) {
    11. vector.push_back(new QDoubleSpinBox);
    12. vector[i]->setValue(0.0);
    13. qDebug() << vector[i]->value();
    14. }
    15. }
    16. void TabDrei::showConvError(const QString & value, const QString & inputNumber ){
    17. QMessageBox::warning(this, "Warnung", "Der von Ihnen eingegebene Wert \"" + value + "\" im Feld \"" + inputNumber + "\" ist ungueltig.");
    18. }
    Alles anzeigen


    ist das soweit richtig????
  • Jup,

    an sich schon und wenn du

    Quellcode

    1. void TabDrei::check();


    auch noch irgendwo auf rufst, passiert auch was.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hehe,

    ich glaube du weißt am besten, wann deine Applikation richtig läuft und wann nicht 8) Das kann ich dir leider auch nicht beantworten. Nur was mir aufgefallen ist, kann auch sein das du einfach nicht den kompletten Code gepostet hast, das du kein Connect hast. Zu einem Slot gehört auch ein Signal, damit du die Funktion ausführen kannst.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • hallo,

    mein connect sieht so aus:

    Quellcode

    1. connect(okPB, SIGNAL(clicked()),
    2. this,SLOT());


    nur weiss ich nicht was bei Slot hin muss ^^.

    Es ist ja so, ich habe

    - ein MainWindow mit drei Tabs
    - zwei Widgets

    der ok-Button ist in TabEins.
    In TabZwei werden 40 Float Werte eingegeben
    In TabDrei werden 7 Physikalische Parameter eingegeben.

    Wenn TabZwei und TabDrei ausgefüllt sind, kann man auf TabEins den ok-Button drücken. Wenn man ok drückt, sollen dann die Werte von TabZwei und TabDrei ausgewertet werden und in TabEins als Bild wiedergegeben werden.


    Für TabZwei ist das die Methode check(), in dem die 40 Parameter an die Funktion weitergegen werden sollen.



    lg

    nicilo
  • Hallo, im Slot muss eine Slopt-Funktion stehen, die du ja schon hast.

    Quellcode

    1. connect(okPB, SIGNAL(clicked()), this, SLOT(check());


    Das this bezieht sich auf die aktuelle Klasse.

    Ich glaube du hast da was mit der Struktur verkehrt gemacht. (bin mir aber nicht sicher.... habe zu wenig infos).

    Wenn du ein MainWindow erstellst dun da drinn ein TabWidget, gelten die Funktionen von QMain auch für das Tab Widget. Somit ist das kein Problem. Das ist alles C++ Vererbung :)

    Aber ist schwer zu sagen da ich dein kompletten Code nicht kenne. Alternativ kannst du das Projekt mal hier im Froum uploaden, dann schau ich mir das gerne mal an.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hallo,

    ich habe dein Code mal überflogen und meiner Meinung nach, gehst du die Sache falsch an... Ich habe mal ein Dummy-Project gemacht, um zu demonstrieren, wie man das macht. Wenn das Programm kompiliert und gestartet ist, findest du unter Tab2 den Text Button not clicked. Wenn du dann auf den Button in Tab1 clickst, dann ändert sich der Text in Tab2. Und das ohne irrsinnige Klassen-Hichrachie.

    Ich hoffe das bringt dich ein Stück weiter. Das Project ist komplett mit .ui file und alles was dazu gehört.

    so long
    jd

    PS: wieso kann ich kein .tar.gz hochladen? Keine Ahnung ob das archiv klappt oder nicht... falls nicht sag bescheit dann uploade ich das fix wo anders.
    Dateien
    • Qtab.zip

      (2,46 kB, 256 mal heruntergeladen, zuletzt: )
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • hi,

    danke für dein dummy-project.
    Warum gehe ich denn falsch vor?? Was mache ich falsch.
    dein Programm bringt mich etwas weiter, aber ich weiss noch immer nicht wie ich die Widgets in die Tabs einfügen kann. Aber brauche ich dein Programm für mein Project??
    Ich danke dir vielmals für deine Hilfe, ich werde versuchen, dein Programm in meines einzubinden.

    lg

    nicilo
  • Hallo,

    das Projekt zeit lediglich wie ich das machen würde :) Um jetzt Widgets in einen bestimmten Tab zu packen, würde ich im Designer einfach ein Layout anlegen und die Widgets ins Layout stopen (so macht der Designer das auch).

    Dazu gibts dann wieder einen Link: Layouts in Qt Und im QDesigner Manual steht alles super erklärt drinn: QDesigner - Layouts

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.