2013-05-20 3 views
0

Я пытаюсь сделать пример Общайтесь (который можно найти в веб-учебнике First program in qt4), но по-другому: кнопки «плюс» и «минус» 'не строятся в конструкторе, но с помощью вызова функции-члена класса ребенка, который наследует класс QWidget атрибуты: классРеализовать слоты в производном классе - qt4/C++

MyWidget из mywidget.h

#ifndef _MYWIDGET_H 
#define _MYWIDGET_H 
#include <QApplication> 
#include <QDesktopWidget> 
#include <QWidget> 
#include <QIcon> 
#include <QPushButton> 
#include <QLabel> 
class myWidget : public QWidget{ 

    public: 
     myWidget(QWidget *parent = 0); 

     void setPMButton(int,int,int,int,int,int); 
    private: 
     QLabel *label; 
    private slots: 
     void OnPlus(); 
     void OnMinus(); 
}; 
#endif 

реализации метода от MyWidget .cpp

#include "mywidget.h" 
myWidget::myWidget(QWidget *parent) : QWidget(parent){ 
    label = new QLabel("0", this); 
    label->setGeometry(190, 80, 20, 30); 
} 
void myWidget::OnPlus(){ 
    int val = label->text().toInt(); 
    val++; 
    label->setText(QString::number(val)); 
} 
void myWidget::OnMinus(){ 
    int val = label->text().toInt(); 
    val--; 
    label->setText(QString::number(val)); 
} 
void myWidget::setPMButton(int x1, int y1, int x2, int y2, int w, int h){ 
    QPushButton *plus = new QPushButton("+", this); 
    plus->setGeometry(x1, y1, w, h); 

    QPushButton *minus = new QPushButton("-", this); 
    minus->setGeometry(x2, y2, w, h); 

    connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus())); 
    connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus())); 
} 

И в главном файле test.cpp, написано:

#include "mywidget.h" 
int main(int argc, char *argv[]){ 

    QApplication app(argc, argv); 

     myWidget window; 

     window.setPMButton(50,120,50,200,75,30);   
     window.show(); 

    return app.exec(); 
} 

Но как только я запускаю приложение, оно показывает окно, но кнопки не работают. На терминале отображается сообщение:

Object::connect: No such slot QWidget::OnPlus() 
Object::connect: No such slot QWidget::OnMinus() 

Есть ли способ сделать эту работу?

ответ

1

Вы забыли добавить макрос Q_OBJECT.

#includes here 
... 

class myWidget : public QWidget{ 

Q_OBJECT ///  <---- Here 

public: 
    myWidget(QWidget *parent = 0); 

... 
... 
+0

yep! ¬¬ ' Теперь это работает! Но почему это не дало ошибку компиляции? – Bessa

+1

Я думаю, потому что нет незаконного кода. Он просто не будет работать так, как ожидалось, никаких соединений с сигналом/слотом, никакого дочернего 'QObject'-управления. – dschulz

Смежные вопросы