Q_OBJECT与否Q_OBJECT

时间:2016-07-21 16:50:23

标签: c++ qt moc

我在main.cpp中用自己的类编写了一个小程序。代码如下:

bar[order(bar$score), ]

似乎有效,但不是“完全”。我的插槽不起作用。我想我必须把Q_OBJECT。但是,这样做,我得到了一个错误列表,如下所示:

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

class MyWidget : public QWidget {
    //Q_OBJECT
public:
    MyWidget(QWidget* parent = 0);
    QLabel* label;
    QString string;

signals:
public slots:
    void setTextLabel();

};

void MyWidget::setTextLabel() {
    label->setText("Test");
}


MyWidget::MyWidget(QWidget* parent) 
     : QWidget(parent) {

}

int main(int argc, char** argv) {
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

我可以管理吗?哪里有问题?

2 个答案:

答案 0 :(得分:5)

Qt中的信号和插槽通过moc:meta对象编译器进行管理。基本上,moc为包含Q_OBJECT宏的每个类生成额外的C ++代码,以便有效地实现信号和时隙机制。然后将附加代码链接到原始类声明。

这里的问题是你的类是在main.cpp中声明的:这与moc如何处理你的代码有冲突。您应该在单独的标题中声明您的类。

More about the moc

编辑:正如hyde指出的,另一种方法是在你的cpp中包含moc生成的文件; more details

答案 1 :(得分:2)

只需将行#include"main.moc"附加到您的cpp源文件即可。