我是Qt创作者的初学者。我创建了一个按钮,可以使用QtProcess::execute()
打开Google 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;
};
我做错了什么?
答案 0 :(得分:4)
您的.h
文件中包含此内容:
public slots:
void buttonClickHandler();
这是一个方法声明,它是一个Qt插槽,所以Qt moc 将生成引用它的代码(为连接信号调用它等)。然后链接器尝试链接该代码以创建应用程序二进制文件。但是你似乎没有任何方法 defintion (实际代码)。
3种可能的修复方法:
从.h
文件中删除该插槽声明,因为您似乎没有使用它。
通过在.h
文件中将上述代码段更改为>>来添加 defionition :
public slots:
void buttonClickHandler() { /* add code if you want some */ }
这会将声明转换为定义(内联成员函数)。
或者,将方法定义添加到.cpp
文件,就像您对其他方法一样:
void MainWindow::buttonClickHandler() {
// your code here
}