QT - 多个定义

时间:2013-11-19 17:12:01

标签: c++ qt

我无法编译这个QT程序,因为我收到关于“Dialog :: status(QString const&)”的多重定义的消息“

有一些代码: 对话器:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

//class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
signals:
    void status(const QString &str);
private slots:
    void on();
private:
    QLabel *label;
    QLineEdit *LineEdit;
    QPushButton *button;
};

#endif // DIALOG_H

和实施文件:

#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>

#include "dialog.h"

Dialog::Dialog(QWidget *parent) : QDialog(parent)
{
    label = new QLabel("Ne label");
    LineEdit = new QLineEdit();
    button = new QPushButton("Push me");

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(label);
    layout->addWidget(LineEdit);
    layout->addWidget(button);
    setLayout(layout);
    setWindowTitle("Dialog name");

    connect(button, SIGNAL(clicked()), this, SLOT(on()));
}

void Dialog::on()
{
    label->setStyleSheet("QLabel { background-color : black; color : white; }");
}

void Dialog::status(const QString &str)
{

}

项目文件看起来很好:

QT += gui declarative
SOURCES += \
main.cpp \
dialog.cpp
HEADERS += \
dialog.h

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您将状态函数声明为信号,然后为其实现一个实体。信号只是一个信号而没有实现。

根据您的意图,您需要删除状态函数的body实现,或者将声明移动为插槽而不是信号。