我是一个在 Qt Creator 中制作程序的初学者。我制作了一个应该使用 打开 Google Chrome 的按钮QtProcess::execute(),但出现以下错误:
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
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
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;
};
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
你的.h文件中有这个:
public slots:
void buttonClickHandler();
Run Code Online (Sandbox Code Playgroud)
它是一个方法声明,也是一个 Qt 插槽,因此 Qt moc将生成引用它的代码(为连接的信号等调用它)。然后链接器尝试链接该代码以创建您的应用程序二进制文件。但似乎您在任何地方都没有方法定义(实际代码)。
3个可能的修复:
从文件中删除该插槽声明.h,因为您似乎没有使用它。
通过将上面的代码片段更改为文件中的以下内容来添加定义.h:
public slots:
void buttonClickHandler() { /* add code if you want some */ }
Run Code Online (Sandbox Code Playgroud)
这会将声明转换为(内联成员函数的)定义。
或者,将方法定义添加到.cpp文件中,就像其他方法一样:
void MainWindow::buttonClickHandler() {
// your code here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6504 次 |
| 最近记录: |