Слот не существует в функции подключения в проекте C ++ / Qt? (уже реран сделать) - PullRequest
1 голос
/ 29 марта 2019

Я добавляю ползунок в easyPaint, который активирует функцию масштабирования.У меня есть ползунок, отображаемый там, где я хочу, на экране, и у функции, которую я создал для него, не должно быть никаких проблем, но когда я запускаю его, я получаю ошибку времени выполнения, что слот не существует, когда он явно,Я уже пытался очистить решение, перезапустить CMake и пересобрать, и все равно каждый раз получаю ошибку «Слот не существует».Кто-нибудь еще может подумать о какой-либо другой причине, по которой я мог бы получить эту проблему?

Вот настройка док-станции с ползунком в классе mainwindow:

dock = new QDockWidget(tr("Zoom"));
slider = new QSlider(dock);
addDockWidget(Qt::BottomDockWidgetArea, dock);
dock->setWidget(slider);
dock->setFeatures(QDockWidget::NoDockWidgetFeatures);
slider->setOrientation(Qt::Horizontal);
slider->setMinimum(0);
slider->setMaximum(16);
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(zoomBarAct(slider->value())));

Вот функция масштабирования, который я объявил в разделе приватных слотов в заголовочном файле:

void MainWindow::zoomBarAct(int zoom)
{
    float factor = static_cast<float>(zoom) / 4;
    getCurrentImageArea()->zoomImage(factor);
    getCurrentImageArea()->setZoomFactor(factor);
}

изменить для объявления функции (другие функции после пропущенных приватных слотов):

private slots:
     void zoomBarAct(int zoom);

1 Ответ

4 голосов
/ 29 марта 2019

Это:

SLOT(zoomBarAct(slider->value()))

не имеет смысла. Вам необходимо указать название слота:

connect(slider, SIGNAL(valueChanged(int)), this, SLOT(zoomBarAct(int));

Тем не менее, вы используете соединения типа сигнал / слот в стиле Qt4. Если вы переключитесь на современный синтаксис в стиле Qt5, эти ошибки будут обнаружены во время компиляции. Используйте это вместо этого, что намного безопаснее и гарантированно никогда не вызовет таких ошибок во время выполнения, так как все проверяется во время компиляции:

connect(slider, &QSlider::valueChanged, this, &MainWindow::zoomBarAct);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...