简单的Qt程序中未定义的引用

时间:2014-01-30 05:13:02

标签: c++ qt undefined

我是Qt创作者的初学者。我创建了一个按钮,可以使用QtProcess::execute()打开Goog​​le Chrome,但我收到以下错误:

F:\Users\Amol-2\Desktop\Imp Docs\C++ apps\build-QtMainLProject-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp:71: error: undefined reference to `MainWindow::buttonClickHandler()'`
:-1: error:  ld returned 1 exit status

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_openChrome_clicked()
{
    QString exeloc = "F:\\Users\\Amol-2\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe";
    QProcess::execute(exeloc);
}

mainwindow.h

    namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void buttonClickHandler();


public slots:
    void on_openChrome_clicked();

private:
    Ui::MainWindow *ui;
};

我做错了什么?

1 个答案:

答案 0 :(得分:4)

您的.h文件中包含此内容:

public slots:
    void buttonClickHandler();

这是一个方法声明,它是一个Qt插槽,所以Qt moc 将生成引用它的代码(为连接信号调用它等)。然后链接器尝试链接该代码以创建应用程序二进制文件。但是你似乎没有任何方法 defintion (实际代码)。

3种可能的修复方法:

1

.h文件中删除该插槽声明,因为您似乎没有使用它。

2

通过在.h文件中将上述代码段更改为>来添加 defionition

public slots:
    void buttonClickHandler() { /* add code if you want some */ }

这会将声明转换为定义(内联成员函数)。

3

或者,将方法定义添加到.cpp文件,就像您对其他方法一样:

void MainWindow::buttonClickHandler() {
    // your code here
}