(史诗)QT编译错误:“未定义引用”

时间:2015-07-24 01:39:47

标签: qt

我是Qt编程的新手。我正在尝试对名为QELabel的epicsQt小部件提供的一些值进行简单的减法,该小部件只读取EPICS通道的值。我想从两个QELabel中减去值并将其打印到另一个QELabel。但是,我正在'未定义参考'这些错误 - >

MainWindow::on_ShutterOpen_dbValueChanged(QString const&) void MainWindow::on_TopShutter_dbValueChanged(const QString &out) { double top,bottom,open; top=ui->TopShutter->text().toDouble(); bottom=ui->BottomShutter->text().toDouble(); open=top-bottom ui->ShutterOpen->setText(Qstring::number(open)); }

这是mainwindow.cpp的一点(我跟着这个youtube video的例子,特别是大约15分钟之后)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_qelabel_dbValueChanged(const QString &out);

    void on_ShutterOpen_dbValueChanged(const QString &out);

    void on_TopShutter_dbValueChanged(const QString &out);

private:
     Ui::MainWindow *ui;
};

#endif //MAINWINDOW_H

我正在使用QTCreator,所以我没有在其他论坛中看到的常见错误。我在头文件中声明了插槽,MainWindow设置为Q_Object(这是整个mainwindow.h文件):

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

因为它们很短,而且为了完整性,这里是main.cpp,然后是.pro

#-------------------------------------------------
QT       += core gui xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = FirstWeatherAlarm
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp

LIBS += -L/usr/lib64/qt5/plugins/designer -lQEPlugin
INCLUDEPATH += /home/jchavez/epicsqt/3.1.0/framework/include

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

和FirstWeatherAlarm.pro:

qmake

我是否在所有文件的开头声明了所有内容?缺少什么让我的插槽不对?我在gui中创建了插槽,使用我的QELabel上的“右键单击”,然后选择“Go to Slot”,所以我认为所有的格式都是正确的。正如我一直在编辑的那样,我还运行make cleanawk,这是我在论坛上看到的其他答案。但没有任何工作。

1 个答案:

答案 0 :(得分:3)

问题在于两个插槽:

MainWindow::on_qeLabel_dbValueChanged(QString const&) 
MainWindow::on_ShutterOpen_dbValueChanged(QString const&) 

它们在MainWindow.h文件中声明并在项目中的某处使用(否则您不会收到错误)。

但是它们没有在mainwindow.cpp中实现。您应该向此文件添加实现,错误将消失。

您已实施

void MainWindow::on_TopShutter_dbValueChanged(const QString &out)

在mainwindow.cpp中,您可以为另外两个插槽添加实现。将插槽视为一种功能。并阅读有关信号/插槽的更多信息。