Class 继承自QLabel,为什么不调用自定义槽?

Class inherited from QLabel, why custom slot is not called?

我让 class 继承自 QLabel。这个 class 也有 public 插槽,应该更改标签标题。我"call"这个SLOTclicked()SIGNAL的按钮。 所以当我按下按钮时没有任何反应。

#include <QApplication>
#include <QLabel>
#include <QPushButton>

class Label : public QLabel
{
public:
    Label(QString a) : QLabel(a){}

public slots:
    void change()
    {
        this->setNum(2);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton* button = new QPushButton("Button");
    Label* lbl = new Label("Label");

    button->show();
    lbl->show();

    QObject::connect(button, SIGNAL(clicked(bool)), lbl, SLOT(change()));

    return a.exec();
}

我应该如何更改插槽中的字幕?

尝试从您的连接调用中获取 return 值并检查它是对还是错。 将 Q_OBJECT 宏添加到派生的 class 的开头。 将一些调试输出添加到您的插槽中,例如

qDebug()<<"This is my slot.";

也许这会有助于更进一步。

此致

为了识别信号和槽,类 必须在私有部分使用 Q_OBJECT 宏。

另一件事是包括 "main.moc",有关这一点的更多信息,请阅读

#include <QApplication>
#include <QLabel>
#include <QPushButton>

class Label : public QLabel
{
    Q_OBJECT
public:
    Label(const QString &text, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()) :
     QLabel(text, parent, f){}

public slots:
    void change()
    {
        setNum(2);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton* button = new QPushButton("Button");
    Label* lbl = new Label("Label");

    button->show();
    lbl->show();

    QObject::connect(button, SIGNAL(clicked()), lbl, SLOT(change()));

    return a.exec();
}

#include "main.moc"

完成这些更改后,您必须执行以下操作:

  1. 在“构建”菜单中按全部清除。
  2. 然后 运行 在同一菜单中进行 qmake。
  3. 您只需撰写您的项目。

之后添加Q_OBJECT
class Label : public QLabel
{

然后你应该

或者将您的Labelclass声明放入.h文件写入#include "main.moc"main 函数声明之后。