PDA

View Full Version : slot problem



yagabey
9th December 2008, 10:29
Hello,

I promoted a widget to a custom widget (scalableWidget)...But when i run the application i get a slot connection problem error like:

Object::connect: No such slot QWidget::setScaleVal(int)
Object::connect: (sender name: 'horizontalSlider')
Object::connect: (receiver name: 'widget')

I couldn't find anything wrong...What may be the problem...?


#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
QObject::connect(ui.horizontalSlider, SIGNAL(valueChanged(int)), ui.widget, SLOT(setScaleVal(int)));

}

MainWindow::~MainWindow()
{

}


my custom widget:


#ifndef SCALABLEWIDGET_H
#define SCALABLEWIDGET_H
#include <QWidget>
#include <QPainter>

class scalableWidget : public QWidget
{

public:
scalableWidget(QWidget * parent = 0, Qt::WindowFlags f = 0);
qreal scaleFactor;

protected:
void paintEvent(QPaintEvent *event);

public slots:
void setScaleVal(int);

};

#endif // SCALABLEWIDGET_H


#include "scalablewidget.h"

scalableWidget::scalableWidget(QWidget * parent, Qt::WindowFlags f)
:QWidget( parent, f )
{
}

void scalableWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.scale(scaleFactor,scaleFactor);

}

void scalableWidget::setScaleVal(int comingValue)
{
scaleFactor=(qreal)comingValue;
}

generated file :


#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QSlider>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>
#include "scalablewidget.h"

QT_BEGIN_NAMESPACE

class Ui_MainWindowClass
{
public:
QWidget *centralWidget;
scalableWidget *widget;
QPushButton *pushButton;
QPushButton *pushButton_2;
QSlider *horizontalSlider;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;

void setupUi(QMainWindow *MainWindowClass)
{
if (MainWindowClass->objectName().isEmpty())
MainWindowClass->setObjectName(QString::fromUtf8("MainWindowClass"));
MainWindowClass->resize(600, 400);
centralWidget = new QWidget(MainWindowClass);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
widget = new scalableWidget(centralWidget);
widget->setObjectName(QString::fromUtf8("widget"));
widget->setGeometry(QRect(220, 30, 171, 131));
pushButton = new QPushButton(widget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(40, 30, 80, 25));
pushButton_2 = new QPushButton(widget);
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
pushButton_2->setGeometry(QRect(70, 80, 80, 25));
horizontalSlider = new QSlider(centralWidget);
horizontalSlider->setObjectName(QString::fromUtf8("horizontalSlider"));
horizontalSlider->setGeometry(QRect(70, 210, 160, 16));
horizontalSlider->setOrientation(Qt::Horizontal);
MainWindowClass->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindowClass);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 23));
MainWindowClass->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindowClass);
mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
MainWindowClass->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(MainWindowClass);
statusBar->setObjectName(QString::fromUtf8("statusBar"));
MainWindowClass->setStatusBar(statusBar);

retranslateUi(MainWindowClass);

QMetaObject::connectSlotsByName(MainWindowClass);
} // setupUi

void retranslateUi(QMainWindow *MainWindowClass)
{
MainWindowClass->setWindowTitle(QApplication::translate("MainWindowClass", "MainWindow", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindowClass", "PushButton", 0, QApplication::UnicodeUTF8));
pushButton_2->setText(QApplication::translate("MainWindowClass", "PushButton", 0, QApplication::UnicodeUTF8));
Q_UNUSED(MainWindowClass);
} // retranslateUi

};

namespace Ui {
class MainWindowClass: public Ui_MainWindowClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

^NyAw^
9th December 2008, 11:49
Hi,

It seems that you forget the Q_OBJECT macro:



class scalableWidget : public QWidget
{
Q_OBJECT
...
}