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

时间:2017-08-03 08:58:58

标签: c++ qt qt5 qlabel qt-signals

我让班级继承自QLabel。这个类也有公共插槽,应该更改标签标题。我使用按钮的clicked() SIGNAL “呼叫”此 SLOT 。 所以当我按下按钮时没有任何反应。

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

如何从插槽中更改字幕?

3 个答案:

答案 0 :(得分:2)

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

要做的另一件事是包含if(x === 'Red dragon') { displayImage('RedDragon.png'); } ,有关此点的更多信息,请阅读this

"main.moc"

在进行这些更改结束时,您必须执行以下操作:

  1. 在Build菜单中按all all。
  2. 然后在同一菜单中运行qmake。
  3. 你只需撰写你的项目。

答案 1 :(得分:0)

尝试从您的connect调用获取返回值,检查它是true还是false。 将Q_OBJECT宏添加到派生类的开头。 添加一些调试输出到您的插槽,如

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

也许这会有助于进一步发展。

祝你好运

答案 2 :(得分:0)

之后添加Q_OBJECT
class Label : public QLabel
{

然后你应该

Label类声明发送到.h文件#include "main.moc"函数声明后写main