Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Не видит SLOT с параметром

Автор: mishabard 13.6.2011, 20:59

Добрый вечер! Все перерыл все погуглил. ответа не нашел. простите. Суть следующая:
Есть два класса, объекты которых создаются динамически, связываю их между собой сигналом и слотом, в первом класе по нажатию кнопки создаю динамически диалоговое окно второго класса, хочу связать сигналом и слотом spinbox и button из двух классов.
Все компилируется, но при зосдании класса пишет:

Object::connect: No such slot MWindows1::slot1(pbase->pcb) in ../untitled1/mainwindows.cpp:54

Пробовал делать слот без параметров, все работет!!!! Но мне не подходит мне необходимо через параметр из класа в класс передать значение.

Вот код: все упростил, чтоб оставить только необходимое:
ПРобовал все варианты:
connect(pbase->pcmdC,SIGNAL(clicked()),this, SLOT(slot1(pbase->pcb)));
QObject::connect(pbase->pcmdC,SIGNAL(clicked()),this, SLOT(slot1(pbase->pcb)));
MWindows1::connect(pbase->pcmdC,SIGNAL(clicked()),this, SLOT(slot1(pbase->pcb)));
а вот так работает:
connect(pbase->pcmdC,SIGNAL(clicked()),this, SLOT(slot1())); // Слот без параметров!!!!!!
Помогите! Что не так??????

Клас 1:
#include"basedialog.h"
#include<QtGui>

class MWindows1: public QDialog
{
Q_OBJECT
public:
.....
public slots:
void slot1(QSpinBox * p){pSpinBox->setValue(p->value()); };
private:
....
QSpinBox * pSpinBox;
.....
};

Клас 2:

#include <QtGui>
class BaseDialog : public QDialog
{
Q_OBJECT
public:
.....
QSpinBox * pcb;
QPushButton * pcmdC;
.....

};

Создаю процедуру обработки нажтия кнопки в класе 1
void MWindows1::PushBaseDialog()
{
BaseDialog * pbase = new BaseDialog;
connect(pbase->pcmdC,SIGNAL(clicked()),this, SLOT(slot1(pbase->pcb))); //н работает

if (pbase->exec()==QDialog::Accepted)
{
.......
}

Автор: Гость 13.6.2011, 21:20

Количество параметров слота всегда не больше количества параметров сигнала. А у тебя наоборот у сигнала нет параметров, а у слота есть.

Автор: mishabard 13.6.2011, 21:41

А как быть в таком случае??? Если сигнал обрабатывается нажатием кнопки clicked()- без параметров, а в слот необходимо передать значение, например указатель.?

Автор: antzol 13.6.2011, 23:02

В слоте пишем:
QPushButton *btn = (QPushButton *)sender();

Или использовать QSignalMapper.

Автор: Litkevich Yuriy 13.6.2011, 23:59

Цитата(mishabard @ 14.6.2011, 0:41) *
а в слот необходимо передать значение
сигнал и передаёт значение в слот, если нет подходящего сигнала, то в слот нечего передавать.

Автор: mishabard 14.6.2011, 23:54

Всем Спасибо! Помогли! я разобрался. все работает)))

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)