c++ - 在派生类中实现插槽 - qt4/c++

标签 c++ qt user-interface qt4

我正在尝试制作示例 Communicate(可以在网络教程 First program in qt4 中找到),但采用不同的方式:按钮“加号”和“减号”是不是在构造函数中构建,而是通过调用继承 QWidget 类属性的子类的成员函数:

来自 mywidget.h 的 myWidget 类

#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()

有什么方法可以让它工作吗?

最佳答案

您忘记添加 Q_OBJECT 宏。

#includes here
...

class myWidget : public QWidget{

Q_OBJECT   ///      <---- Here

public:
    myWidget(QWidget *parent = 0);

...
...

关于c++ - 在派生类中实现插槽 - qt4/c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641350/

相关文章:

qt - QtWebEngine 和 WebView 有什么区别?

c++ - 包含在 header 或 cpp 中——Qt 中首选的是什么

c++ - 从我的程序通过 gui 控制其他应用程序

ios - 如何使用独立的 NIB 制作标签栏应用程序?

c++ - 使用资源时将错误的图标加载到 Visual Studio 项目中

c++ - MingW Netbeans 6.9.1 问题

qt - 如何从组件 QTextDocument 获取没有元信息的 HTML 文本

HTML:将 TextBox 替换为纯文本但保持布局

c++ - Visual Studio 中 EOF 之前的 EOF

c++ - 为什么 visual studio code C/C++ 扩展会安装 mono 框架程序集?