axe_lankaster13
@axe_lankaster13
C++ разраб с большими планами

Как передать параметры в слот родительского объекта?

Пересмотрел много различных примеров, но так и не понял, как передать параметры в слот родительского объекта.
Класс объекта, передающего параметры:
class MakeTable : public QDialog
{
public:
    MakeTable(QWidget* parent = nullptr);
private:
    QGridLayout* lay;

    qint16 width;
    qint16 height;

    QLabel* w;
    QLabel* h;

    QSpinBox* setWidth;
    QSpinBox* setHeight;

    QPushButton* ok;
    QPushButton* cancel;
public slots:
    void reject();
};

Конструктор этого класса:
MakeTable::MakeTable(QWidget* parent)
    : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
{
    w = new QLabel("Введите количество столбцов таблицы");
    h = new QLabel("Введите количество строк таблицы");

    setWidth = new QSpinBox;
    setHeight = new QSpinBox;

    setWidth->setMaximumWidth(50);
    setWidth->setMaximum(1024);
    setWidth->setMinimum(1);
    setWidth->setValue(32);

    setHeight->setMaximumWidth(50);
    setHeight->setMaximum(1024);
    setWidth->setMinimum(1);
    setHeight->setValue(32);

    w->setBuddy(setWidth);
    h->setBuddy(setHeight);

    ok = new QPushButton("ОК");
    cancel = new QPushButton("Отмена");

    width = qint16(setWidth->value());
    height = qint16(setHeight->value());

    connect(ok, SIGNAL(clicked()), parent, SLOT(makeTable(width, height))); //Здесь непонятный момент.
    connect(cancel, SIGNAL(clicked()), this, SLOT(reject()));

    lay = new QGridLayout;
    lay->addWidget(w,0,0);
    lay->addWidget(h,1,0);
    lay->addWidget(setWidth,0,1);
    lay->addWidget(setHeight,1,1);
    lay->addWidget(ok, 2,0);
    lay->addWidget(cancel, 2,1);
    setLayout(lay);
    this->setFixedSize(320,100);
    this->show();
    this->exec();
}

Слот родительского виджета, получающий параметры:
void Widget::makeTable(qint16 width, qint16 height);

Родительский виджет - parent в конструкторе MakeTable.
Параметрами являются значения из QSpinBox'ов MakeTable.
При выполнении программы в консоль "Вывод приложения" QtCreator выдаётся следующая ошибка:
QObject::connect: No such slot Widget::makeTable(width, height)
QObject::connect: (receiver name: 'Widget')
  • Вопрос задан
  • 551 просмотр
Пригласить эксперта
Ответы на вопрос 1
В функции connect слот должен содержать описание функции с типом параметров, например,
connect(ok, SIGNAL(clicked()), parent, SLOT(makeTable(qint16, qint16)))

Правда, это не решит проблему с передачей парметров в слот, потому как сигнал параметров не содержит. Для этого пользуйтесь локальными переменными членами класса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы