QT-多个定义

QT - multiple definitions

本文关键字:定义 QT-      更新时间:2023-10-16

我无法编译此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

谢谢你的帮助。

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

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