我的插槽方法我试图显示创建的对话框,但我得到这个错误:
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
右键单击项目>清理
右键单击项目>运行qmake
右键单击project> Build
跑 - 第一次工作
这个工作的原因是因为Run qmake更新了你的Makefile.出于某种原因,当您对项目进行更改(例如添加或删除文件)时,qt不会自动更新路径.运行qmake强制qt更新项目的路径,使其能够找到mainwindow.obj文件.您可能只需运行qmake,您的问题就可以解决了.
似乎editstudentdialog.obj文件未正确创建.尝试清理项目(Build-> Clean all)并再次构建它.如果它没有帮助检查是否将editstudentdialog.cpp添加到.pro文件中的SOURCES变量.如果仍然没有任何反应,请提供.pro文件.
编辑:如下所述,您也可以尝试删除整个应用程序并再次创建它.
我刚刚经历过同样的问题."Build All","Rebuild All","Clean All"并没有帮助我解决"未解决的外部符号"问题.
但是,在我完全删除了构建目录(在我的情况下为C:\ dev\projects\qt\build-qt-gui-test-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug)之后,重建工作就像一个魅力.
希望这能帮助你,弗拉基米尔