Ошибка "нет такого слота" qt - PullRequest
2 голосов
/ 05 августа 2011

Я пытаюсь соединить два виджета с помощью опции сигналов / слотов, но я получаю эту ошибку, что «такого слота нет».Дело в том, что при написании программы я использовал Ctrl + пробел, просто чтобы убедиться, что я не делаю опечаток.

, поэтому у меня есть один виджет:

renderArea.h


    class renderArea : public QGraphicsView
    {
        Q_OBJECT
    public:
        renderArea(QWidget *parent = 0);

    void addClothoid(float length, float startCurvature, float endCurvature);

    signals:
        void sendData(float length, float startCurvature, float endCurvature);

    };

renderArea.cpp


    void renderArea::addClothoid(float length, float startCurvature, float endCurvature)
    {
        ...

            emit sendData(length, startCurvature, endCurvature);
        }
    }

2-й виджет:

tableViewList.h


    class TableViewList: public QTableView
    {
        Q_OBJECT

    public:
        TableViewList(QWidget* parent = 0);

    protected slots:
        void onClothoidAdded(float length, float startCurvature, float endCurvature);
    };

tableViewList.cpp


    void TableViewList::onClothoidAdded(float length, float startCurvature, float endCurvature)
    {

    ...
    }

и основной виджет:

renderwidget.cpp, где я соединяю 2 выше:


    renderingWidget::renderingWidget(QWidget *parent) :
            QWidget(parent),
            ui(new Ui::renderingWidget)
    {
        ui->setupUi(this);

    connect(ui->graphicsView, SIGNAL(sendData(float,float,float)), ui->clothoidTable,
                SLOT(onClothoidAdded(float,float,float)));
    }

ui-> graphicsView повышен до renderArea, а ui-> clothoidTable для TableViewList.

Так почему может появиться эта ошибка?

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Перегенерировали ли вы файлы проекта после добавления сигнала / слотов в класс?В зависимости от вашей системы сборки это необходимо, чтобы все заработало.

Qt необходимо предварительно обработать заголовки классов (он не сканирует в файлах cpp), чтобы сгенерировать дополнительный код, реализующий поведение сигнал / слот (для сигнала / слотов он использует компилятор MOC).Если Qt не знает, что класс X содержит сигнал или слот, он просто не сгенерирует метаинформацию для этого класса.

Путем повторной генерации файлов проекта / Make file Qt снова просканирует все файлы и сгенерирует необходимые команды для компилятора MOC.

1 голос
/ 05 августа 2011

Ваш слот защищен и поэтому не виден renderingWidget.Вам нужно будет сделать его общедоступным, если вы хотите установить соединение с ним извне TableViewList.

...