我是一个初学者,在Qt创建者中制作程序。我制作了一个应该使用QtProcess::execute()打开Google的按钮,但是我得到了以下错误:
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 statusmainwindow.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;
};我做错了什么?
发布于 2014-01-30 07:15:12
在您的.h文件中有如下内容:
public slots:
void buttonClickHandler();它是一个方法声明,它是一个Qt槽,所以Qt将生成引用它的代码(为连接的信号等调用它)。然后链接器尝试链接该代码以创建应用程序二进制。但似乎在任何地方都没有方法定义(实际代码)。
3个可能的解决办法:
1.
从.h文件中删除槽声明,因为您似乎没有使用它。
2.
通过在.h文件中更改上面的代码段来添加冲突:
public slots:
void buttonClickHandler() { /* add code if you want some */ }这会将声明转换为(内联成员函数的)定义。
3.
或者,将方法定义添加到.cpp文件中,就像对其他方法一样:
void MainWindow::buttonClickHandler() {
// your code here
}https://stackoverflow.com/questions/21448326
复制相似问题