Qt Hilfe



  • Hallo,

    hab mal ne frage zu Qt. Hab jetzt ein Programm mit Qt erstellt, TextFinder, doch da hab ich glaube ich ein Problem.

    The on_findButton_clicked() slot is called automatically in the uic generated ui_textfinder.h file by this line of code:

    QMetaObject::connectSlotsByName(TextFinder);

    Was soll das heißen? Wo finde ich "ui_textfinder.h", soll ich das seber erstellen und da den Code einfügen? Hab ich mal gemacht aber dann error!



  • Möglicherweise hilft das weiter (frech aus einem Qt-Forum kopiert)

    setupUi calls connectSlotsByName. connectSlotsByName parses the moc_ file in order to connect slots and signals. The moc_ file contains a list of all the slots for the class. The parser iterates over the list of slot names looking for the following pattern: on_objectName_signal, where on_objectName_signal is the name of the slot, objectName is the object name and signal is the signal. For example, if you have a slot named, on_doneButton_clicked(), the parser looks for an object named doneButton, a signal named clicked and then connects the on_doneButton_clicked() slot to QButton’s signal clicked().

    If you follow this naming convention, you do not need to call the connect() method, nor do you need to connect the signal via the Qt UI editor in VisualStudio. connectSlotsByName will automatically make the connection for you.

    So, in order to get rid of the “No matching signal for…” warnings, we need to either follow this naming convention, or make sure none of our slot names begin with “on_”. If you have a slot, onDoneButton_clicked, for example, connectSlotsByName will no try to connect it with a signal, nor will emit an warning.



  • Sorry hilft mit nicht ganz weiter, bitte auf Deutsch 🙂



  • Hallo,

    hab jetzt einbisschen das QT tut durchgelesen (http://doc.trolltech.com/4.1/examples.html#qt-tutorial) und versuche ein kleines Programm zu schreiben.

    Das Programm hat ein: Button, LineEdit und TextEdit, und soll den Text von LineEidt nach TextEdit schreiben wenn man auf den Button klickt.

    Ich verstehe noch nicht wie ich das mit dem connect verbinden soll. In WinForms (C++/CLI) ist das so das man da ein Event hat (z.B. Click-Event) und in der Event-Funktion kann man dann auf Objekte zugreifen, wie geht das in QT?

    #include <QApplication>
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QPushButton>
    #include <QLineEdit>
    #include <QTextEdit>
    
    #include <string>
    
    class MyWidget : public QWidget{
    
    public:
        MyWidget(QWidget *parent = 0);
    
    };
    
    MyWidget::MyWidget(QWidget *parent) : QWidget(parent){
        QLineEdit *lineEdit = new QLineEdit;
        QPushButton *button = new QPushButton(tr("OK"));
        QTextEdit *textEdit = new QTextEdit;
    
        //connect(button, SIGNAL(clicked()) , ???, SLOT(???));
    
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(lineEdit);
        layout->addWidget(button);
        layout->addWidget(textEdit);
        setLayout(layout);
    }
    
    int main(int argc, char *argv[]){
        QApplication app(argc, argv);
    
        MyWidget window;
    
        window.show();
    
        return app.exec();
    }
    


  • Ohne Englisch kannst du das Programmieren auch gleich sein lassen, alle interessanten Sachen, nach den Grundlagen, werden nur in Englisch vermittelt. Also entweder Englisch lernen oder ein Noob bleiben, du hast du Wahl.



  • Das Tutorial ist auf "Englisch". Ich weiß nur nicht wie man mit Hilfe eines Buttons und connect den Text von LienEdit nach TextEdit einfügt. Bisher sah ich nur wie man zwei Objekte mit connect verbindet!



  • ghostboss schrieb:

    Bisher sah ich nur wie man zwei Objekte mit connect verbindet!

    Anders geht es doch auch hier nicht! Schreib dir einen SLOT, in dem du den Text des LineEdit im TextEdit einfügt, connecte das clicked()-SIGNAL des Buttons auf diesen SLOT und fertig.



  • Hab das jetzt so gemacht aber da stimmt wohl was nicht:

    #include <QApplication>
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QPushButton>
    #include <QLineEdit>
    #include <QTextEdit>
    
    class MyWidget : public QWidget{
    
        QLineEdit *lineEdit;
        QPushButton *button;
        QTextEdit *textEdit;
    
    private slots:
        void SetText();
    
    public:
        MyWidget(QWidget *parent = 0);
    
    };
    
    MyWidget::MyWidget(QWidget *parent) : QWidget(parent){
        lineEdit = new QLineEdit;
        button = new QPushButton(tr("OK"));
        textEdit = new QTextEdit;
    
        connect(button, SIGNAL(clicked()), this, SLOT(SetText()));
    
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(lineEdit);
        layout->addWidget(button);
        layout->addWidget(textEdit);
        setLayout(layout);
    }
    
    void MyWidget::SetText(){
        //lineEdit->setText("hallo");
        close();
    }
    
    int main(int argc, char *argv[]){
        QApplication app(argc, argv);
    
        MyWidget window;
    
        window.show();
    
        return app.exec();
    }
    

    nach dem Klick soll die Anwendung geschlosen werden, aber die schliesst nicht?!



  • Man startet in so einem Falle die Anwendung in einer Konsole (oder schaut, ob in der verwendeten IDE im Anwendungs-Ausgabe-Fenster etwas steht). Du bekommst garantiert eine Meldung dass mit dem connect etwas nicht geht. DENN: deiner Klasse fehlt das Q_OBJECT-Macro! Wenn du das einfügst, bekommst du einen weiteren Fehler wg. undefined references. Dann brauchst du nämlich noch den moc.
    Tu dir einen Gefallen und arbeite erstmal das Tutorial ganz durch (nicht nur Teil 1), bevor du selber was rumbastelst. Dann weißt du genauer wegen wo, wann was und warum.



  • learnenglish schrieb:

    Ohne Englisch kannst du das Programmieren auch gleich sein lassen, alle interessanten Sachen, nach den Grundlagen, werden nur in Englisch vermittelt. Also entweder Englisch lernen oder ein Noob bleiben, du hast du Wahl.

    Das ist erstens mal wieder eine sehr hilfreiche Antwort und zweitens muss ich dem auch gleich mal widersprechen: es gibt Programmiersprachen (z.B. C#) bei denen man auch gänzlich ohne Englischkenntnisse sehr weit kommt! In vielen Sprachen sind sehr gute Bücher verfügbar, bzw. wenn wir beim Beispiel .NET-Framework bleiben, auch eine ausgezeichnete (deutsche!) Dokumenatation!

    Die Dokumentation für Qt ist meiner Meinung nach hervorragend, aber halt nunmal komplett in englischer Sprache verfasst. Wer keine Englischkenntnisse hat kommt mit Hilfe von kostenlosen Tutorials meist nicht weiter, da hilft letztendes wirklich nur ein gutes Buch!

    Sorry für OT 🙄


Anmelden zum Antworten