connect: No such slot



  • Hallo,
    ich probiere gerade selbst eine Grafik auf zu bauen, da ich random neue lineEdits hinzufügen möchte. Nun habe ich aber probleme mit meinem connect. Vielleicht könnt ihr mir sagen was ich falsch mache.

    mainwindow.cpp:

    #include "mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
    {
       QPushButton* addButton = new QPushButton;
       QPushButton* deleteButton = new QPushButton;
    
       addButton->setText("ADD");
       deleteButton->setText("DELETE");
    
       connect(addButton, SIGNAL(clicked()), this, SLOT(addButton_clicked()));
       connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteButton_clicked()));
    }
    

    Und an der stelle bei connect bekomme ich immer die Fehlermeldung: QObject::connect: No such slot MainWindow::addButton_clicked()

    Das selbe auch mit delete Button. Wo liegt mein Fehler?

    Vielen dank im vorraus für die hilfe.
    Gruß Lillith



  • Zeig doch mal den Header.



  • Die Meldung ist doch recht klar. Die Funktion für den Slot existiert nicht. Die musst du schon selber schreiben.
    Deine Buttons habe derzeit auch keine Parent und sind in kein Layout eingebunden. Das muss schon noch kommen.



  • Sie sind eingebunden. Ich habe nur nicht alles jetzt mit rein geschrieben, da ich dachte es währe nicht relevant.

    mein header:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <vector>
    #include <QLineEdit>
    #include <QPushButton>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <iostream>
    #include <QList>
    
    using namespace std;
    
    class MainWindow:public QMainWindow
    {
    
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget* parent = 0);
        ~MainWindow();
        void addButton_clicked();
        void deleteButton_clicked();
    
    private:
       QVBoxLayout* layout;
       QList<QLineEdit*> qlist;
    };
    
    #endif // MAINWINDOW_H
    

    so und damit es da nicht zu missverständnissen kommt, einmal die ganze cpp:

    #include "mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
    {
       QWidget* window = new QWidget(this);
       QVBoxLayout* mainlayout = new QVBoxLayout;
       layout = new QVBoxLayout;
       QHBoxLayout* buttonlayout = new QHBoxLayout
       QPushButton* addButton = new QPushButton;
       QPushButton* deleteButton = new QPushButton;
    
       addButton->setText("ADD");
       deleteButton->setText("DELETE");
    
       buttonlayout->addWidget(addButton);
       buttonlayout->addWidget(deleteButton);
       buttonlayout->setAlginment(Qt::AlignTop);
       mainlayout->addLayout(layout);
       mainlayout->addLayout(buttonlayout);
       window->setLayout(mainlayout);
       setCentralWidget(window);
    
       connect(addButton, SIGNAL(clicked()), this, SLOT(addButton_clicked()));
       connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteButton_clicked()));
    }
    
    MainWindow::~MainWindow(){}
    
    void MainWindow::addButton_clicked()
    {
       QLineEdit* lineEdit = new QLineEdit;
       qlist.push_back(lineEdit);
       layout->addWidget(lineEdit);
       lineEdit->setObjectName("lineedit"+QString::number(qlist.count()));
    }
    

    so, das ist dann alles was ich bisher so habe.
    Vielen dank
    Lillith



  • Deine Methoden für die buttons sind nicht als SLOT declariert.
    Schau dir am besten ein Beispiel wie das signal/slot modell in Qt funktioniert
    http://doc.qt.io/qt-5/signalsandslots.html



  • Kaum geschrieben und mit einmal machte es click(im warsten sinne des Wortes 😃 😃 ) ich hatte die vergessen im header unter private slots zu packen und schwupps funktionert es....vielen dank trotzdem an die hilfen xD



  • Ja firefly xD wenn ich die mit qt automatisch erstellen lasse macht er es ja von sich aus...so hatte ich es jetzt einfach vergessen. Vielen dank dir dennoch


Anmelden zum Antworten