找不到档案:mainwindow.obj

Jac*_*son 4 c++ qt

  1. 我创建了一个GUI应用程序 - > QMainWindow
  2. 我在菜单+插槽中添加了1个项目.
  3. 我创建了一个新项目 - > QDialog
  4. 我的插槽方法我试图显示创建的对话框,但我得到这个错误:

    mainwindow.obj:-1:错误:LNK2019:未解析的外部符号"public:__ cdecl EditStudentDialog :: EditStudentDialog(类QWidget*)"(?? 0EditStudentDialog @@ QEAA @ PEAVQWidget @@@ Z)在函数"private:void __cdecl"中引用MainWindow :: on_actionNew_triggered(void)"(?on_actionNew_triggered @ MainWindow @@ AEAAXXZ)

    mainwindow.obj:-1:错误:LNK2019:未解析的外部符号"public:virtual __cdecl EditStudentDialog :: ~EditStudentDialog(void)"(?? 1EditStudentDialog @@ UEAA @XZ)在函数"private:void __cdecl MainWindow :: on_actionNew_triggered"中引用(void)"(?on_actionNew_triggered @ MainWindow @@ AEAAXXZ)

这是主窗口:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_actionNew_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "editstudentdialog.h"

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

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

void MainWindow::on_actionNew_triggered()
{
    EditStudentDialog editDialog;
    editDialog.setModal(true);
    editDialog.exec();
}
Run Code Online (Sandbox Code Playgroud)

这是对话框(只是一个空的,没有控件):

#ifndef EDITSTUDENTDIALOG_H
#define EDITSTUDENTDIALOG_H

#include <QDialog>

namespace Ui {
class EditStudentDialog;
}

class EditStudentDialog : public QDialog
{
    Q_OBJECT

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

private:
    Ui::EditStudentDialog *ui;
};

#endif // EDITSTUDENTDIALOG_H


#include "editstudentdialog.h"
#include "ui_editstudentdialog.h"

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

EditStudentDialog::~EditStudentDialog()
{
    delete ui;
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:这是.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = GUI1
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    editstudentdialog.cpp

HEADERS  += mainwindow.h \
    editstudentdialog.h

FORMS    += mainwindow.ui \
    editstudentdialog.ui
Run Code Online (Sandbox Code Playgroud)

PS:我试图清理项目,然后构建它,但仍然是同样的问题.

编辑2:我使用Qt Creator 2.7和Qt 5.0.2

小智 21

  1. 右键单击项目>清理

  2. 右键单击项目>运行qmake

  3. 右键单击project> Build

  4. 跑 - 第一次工作

为什么会这样

这个工作的原因是因为Run qmake更新了你的Makefile.出于某种原因,当您对项目进行更改(例如添加或删除文件)时,qt不会自动更新路径.运行qmake强制qt更新项目的路径,使其能够找到mainwindow.obj文件.您可能只需运行qmake,您的问题就可以解决了.


Eff*_*ndi 6

似乎editstudentdialog.obj文件未正确创建.尝试清理项目(Build-> Clean all)并再次构建它.如果它没有帮助检查是否将editstudentdialog.cpp添加到.pro文件中的SOURCES变量.如果仍然没有任何反应,请提供.pro文件.

编辑:如下所述,您也可以尝试删除整个应用程序并再次创建它.


Vla*_* L. 6

我刚刚经历过同样的问题."Build All","Rebuild All","Clean All"并没有帮助我解决"未解决的外部符号"问题.

但是,在我完全删除了构建目录(在我的情况下为C:\ dev\projects\qt\build-qt-gui-test-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug)之后,重建工作就像一个魅力.

希望这能帮助你,弗拉基米尔