2014-01-20 56 views
0

我有Qt Creator中取得了Qt工程。 我讓創作者本身產生一個私有槽函數FX。 on_pushbutton_clicked()。 此功能在頭部聲明,函數本身是由Qt Creator中創建cpp文件。 當我移動通過Qt Creator中產生的另一個CPP文件(這是在項目補充說,它已同包括所生成的CPP。 當我嘗試編譯它,我得到LNK2019錯誤CPP文件中的函數。 是有什麼辦法可以有縫隙的功能在不同的文件? 我使用VC編譯。 好了,這是從代碼提取物。(這是相當長) gui.hQt的移動插槽功能到另一個CPP文件

#ifndef GUI_H 
#define GUI_H 

#include <QMainWindow> 
#include "buffer.h" 
#include <string> 
#include <map> 
#include <math.h> 
#include <sstream> 
#include <stdlib.h> 
#include "qcustomplot.h" 
#include <limits> 
#include <time.h> 
#include <random> 


namespace Ui { 
class GUI; 
} 

class GUI : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit GUI(QWidget *parent = 0); 
    ~GUI(); 
private slots: 

    void on_setall_clicked(); 

    void on_integrace_button_clicked(); 
    void on_elipsy_button_clicked(); 
    void on_grafy_button_clicked(); 

private: 
    Ui::GUI *ui; 



}; 
#endif // GUI_H 

gui.cpp

#include "gui.h" 
#include "ui_gui.h" 

double drand(double from, double to){ 
    double f = (double)rand()/RAND_MAX; 
    return from + f * (to - from); 
} 

GUI::GUI(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::GUI) 
{ 
    ui->setupUi(this); 
    srand(time(0)); 
} 

GUI::~GUI() 
{ 
    delete ui; 
} 
void GUI::on_setall_clicked(){...}; 
void GUI::on_grafy_button_clicked(){...}; 
void GUI::on_integrace_button_clicked(){...}; 

elipsy.cpp

#include "gui.h" 
void GUI::on_elipsy_button_clicked(){...}; 

GUI.pro

#------------------------------------------------- 
# 
# Project created by QtCreator 2013-03-27T09:01:31 
# 
#------------------------------------------------- 

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport 

TARGET = GUI 
TEMPLATE = app 


SOURCES += main.cpp\ 
     gui.cpp \ 
    solve_rpn.cpp \ 
    shunting_yard.cpp \ 
    qcustomplot.cpp \ 
    elipsy.cpp \ 
    grafy.cpp \ 
    integrace.cpp 

HEADERS += gui.h \ 
    buffer.h \ 
    qcustomplot.h 

FORMS += gui.ui 

和錯誤代碼,它給了我,當我嘗試用elipsy_button_clicked函數編譯()比其他gui.cpp文件

moc_gui.obj:-1: Chyba:LNK2019: unresolved external symbol "private: void __cdecl GUI::on_elipsy_button_clicked(void)" ([email protected]@@AEAAXXZ) referenced in function "private: static void __cdecl GUI::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@[email protected]@@[email protected]) 
debug\GUI.exe:-1: Chyba:LNK1120: 1 unresolved externals 

好,如果你需要整個源代碼,我上傳了它 http://seed.gweana.eu/public/GUI.7z

F IXED:該文件被項目忽略,運行qmake再次解決了這個問題。您的答案:)

+0

它很難告訴你做什麼,你真的需要張貼代碼所以我們可以看看。你基本上需要像爲普通的C++類那樣去做。 –

+1

請向我們顯示您的代碼 –

+0

請顯示確切的錯誤信息。 – hyde

回答

0

其中的一個問題是,你導出的插槽方法elipsy.cpp,其中第14行試圖使用:ui ...它被定義在ui_gui.h包括只在gui.cpp,但在gui.h前鋒聲明(你當然包括在elipsy.cpp)所以這應該會給你一個編譯錯誤。解決方案:在elipsy.cpp中包含ui_gui.h。如果它不給你一個編譯錯誤嘗試重建應用程序。

其次,你drand功能在gui.cpp定義,但沒有在任何頭文件(很容易可以解決的,修改gui.h)...

修復這兩個問題彙編是好的,我後。

因此,一些建議:

  1. 保留東西,因爲他們的時候......你只會弄亂你的頭走動的事情,當涉及到Qt的。
  2. 對公用事業一個獨立的「模塊」,如drand

(PS:尼斯應用:))

+0

1)這不是一個真正的問題,UI本身是類GUI的一部分,所以不需要包含ui_gui.h 2)是的,這將是一個問題,修復了這個問題 最後,對於這個問題,編譯器忽略了elipsy .cpp沒有mather我做了什麼。運行qmake再次解決了我的問題...編譯的文件,我沒有更多的錯誤。 – Gweana

0

一般插槽在頭文件中聲明的一樣,在我的Counter.h非常感謝:

#include <QObject> 

    class Counter : public QObject 
    { 
    Q_OBJECT 

    public: 
    Counter() { m_value = 0; } 

    int value() const { return m_value; } 

    public slots: 
    void setValue(int value); 
.... 

現在Counter.cpp(而且必須包括Counter.h)我會像任何其他正常的函數一樣定義這個函數。

因此,在這種情況下,一切都會correctly.Does,回答你的問題?

相關問題