PDA

View Full Version : Why I see: Object::connect: No such slot QDialog::showName(QString) in



8Observer8
15th October 2013, 09:53
Hi,

Why I see: Object::connect: No such slot QDialog::showName(QString) in ../DialogByButton/mainwindow.cpp:29

DialogByButton.pro


SOURCES += \
main.cpp \
mainwindow.cpp \
dialog.cpp

HEADERS += \
mainwindow.h \
dialog.h


dialog.h


#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtGui>

class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);

signals:

public slots:
void showName(QString name);

private:
QLabel *lblName;
};

#endif // DIALOG_H


dialog.cpp


#include "dialog.h"

Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
// Controls
lblName = new QLabel(tr("Hahah"));

// Layouts
QHBoxLayout* mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(lblName);

// Set Layout
this->setLayout(mainLayout);
}

void Dialog::showName(QString name) {
//lblName->setText(name);
}


mainwindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);

signals:
void sendName(QString name);

private slots:
void callDialog();

private:
QLineEdit *leName;
};

#endif // MAINWINDOW_H


mainwindow.cpp


#include "mainwindow.h"
#include "dialog.h"
#include <QWidget>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
// Controls
QLabel *lblName = new QLabel(tr("Enter your name:"));
leName = new QLineEdit;
QPushButton *btnCallDialog = new QPushButton(tr("Call Dialog"));

// Layout
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(lblName, 0, 0);
mainLayout->addWidget(leName, 0, 1);
mainLayout->addWidget(btnCallDialog, 1, 0, 1, 2);

// Set center widget
QWidget *widget = new QWidget;
widget->setLayout(mainLayout);
this->setCentralWidget(widget);

connect(btnCallDialog, SIGNAL(clicked()), this, SLOT(callDialog()));
}

void MainWindow::callDialog() {
QDialog *dialog = new QDialog(this);
connect(this, SIGNAL(sendName(QString)), dialog, SLOT(showName(QString)));
emit sendName(leName->text());
dialog->show();
}


main.cpp


#include <QApplication>
#include "mainwindow.h"

int main (int argc, char *argv[]) {
QApplication app(argc, argv);

MainWindow window;
window.show();

return app.exec();
}


Thank you!

8Observer8
15th October 2013, 12:18
I solved this problem.

I write instead:


void MainWindow::callDialog() {
QDialog *dialog = new QDialog(this);
connect(this, SIGNAL(sendName(QString)), dialog, SLOT(showName(QString)));
emit sendName(leName->text());
dialog->show();
}

This code:


void MainWindow::callDialog() {
Dialog dialog;
connect(this, SIGNAL(sendName(QString)), &dialog, SLOT(showName(QString)));
emit sendName(leName->text());
dialog.exec();
}}

anda_skoa
15th October 2013, 16:43
Obviously QDialog does not have a slot that you declared in a subclass of QDialog :)

Cheers,
_

8Observer8
15th October 2013, 16:45
Thank you :)