Class 继承自QLabel,为什么不调用自定义槽?
Class inherited from QLabel, why custom slot is not called?
我让 class 继承自 QLabel
。这个 class 也有 public 插槽,应该更改标签标题。我"call"这个SLOT和clicked()
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"
完成这些更改后,您必须执行以下操作:
- 在“构建”菜单中按全部清除。
- 然后 运行 在同一菜单中进行 qmake。
- 您只需撰写您的项目。
在
之后添加Q_OBJECT
class Label : public QLabel
{
然后你应该
或者将您的Label
class声明放入.h
文件或写入#include "main.moc"
在 main
函数声明之后。
我让 class 继承自 QLabel
。这个 class 也有 public 插槽,应该更改标签标题。我"call"这个SLOT和clicked()
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"
完成这些更改后,您必须执行以下操作:
- 在“构建”菜单中按全部清除。
- 然后 运行 在同一菜单中进行 qmake。
- 您只需撰写您的项目。
在
之后添加Q_OBJECT
class Label : public QLabel
{
然后你应该
或者将您的Label
class声明放入.h
文件或写入#include "main.moc"
在 main
函数声明之后。