2015-07-24 3 views
2

Я новичок в программировании с Qt. Я пытаюсь сделать простое вычитание некоторых значений, полученных от виджета epicsQt под названием QELabel, который просто считывает значение канала EPICS. Я хочу вычесть значения из двух QELabels и распечатать их в другой QELabel. Но, я получаю «неопределенные ссылки на» ошибки для них ->(эпос) QT ошибка компиляции: «неопределенная ссылка на»

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

Вот это немного mainwindow.cpp (я последовал примеру из этого youtube video, особенно после того, как о 15-й минуте)

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)); 
} 

Я использую QtCreator, так что я не обычные ошибки, которые я видеть в других форумах. У меня есть слот, объявленный в заголовочном файле, и MainWindow устанавливается как Q_OBJECT (это весь файл mainwindow.h):

#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 

Поскольку они короткие, и для полноты картины, вот main.cpp, а затем .pro

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

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

    return a.exec(); 
} 

и FirstWeatherAlarm.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 

у меня есть все объявлены в самом начале всех файлов? Что не хватает, чтобы мои слоты были неправильными? Я создал слот в gui, используя «правый щелчок» на моем QELabel и выбрав «Go to Slot», поэтому я думаю, что все форматирование будет правильным. Поскольку я редактировал, я также запускал qmake и make clean, которые являются другими ответами, которые я видел на форумах. Но ничего не работает.

ответ

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, вы можете добавить реализацию в течение еще двух слотов. Подумайте о слоте как функции. И читайте больше о сигналах/слотах.

Смежные вопросы