我让班级继承自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();
}
如何从插槽中更改标题?
为了识别信号和槽,类必须在私有部分中使用Q_OBJECT
宏。
另一件事是包括"main.moc"
,有关这一点的更多信息,请阅读this。
#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"
在进行这些更改结束时,您必须执行以下操作:
尝试从你的连接调用中获取返回值,检查它是真还是假。将Q_OBJECT宏添加到派生类的开头。添加一些调试输出到您的插槽,如
qDebug()<<"This is my slot.";
也许这会有助于进一步发展。
最好的祝福
之后添加Q_OBJECT
class Label : public QLabel
{
然后你应该
要么将Label
类声明放在.h
文件中,要么在#include "main.moc"
函数声明后写main
。