collect2.exe:-1: 错误:error: ld returned 1 exit status 求过来人解答

OuterST 2013-05-10 10:53:21
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QFileDialog>
#include <QTextStream>
#include "ui_mainwindow.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

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

private:
Ui::MainWindow *ui;
bool isSaved;//为true 时标志文件已经保存,为false 时标志文件尚未保存
QString curFile;//保存当前文件的文件名
void do_file_New(); //新建文件
void do_file_SaveOrNot();//修改过的文件是否保存
void do_file_Save();//保存文件
void do_file_SaveAs();//文件另存为
bool saveFile(const QString& fileName);//存储文件

};
void MainWindow::do_file_SaveOrNot() //弹出是否保存文件对话框
{
if(ui->textEdit->document()->isModified()) //如果文件被更改过,弹出保存对话框
{
QMessageBox box;
box.setWindowTitle(tr("警告"));
box.setIcon(QMessageBox::Warning);
box.setText(curFile + tr(" 尚未保存,是否保存?"));
box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
if(box.exec() == QMessageBox::Yes) //如果选择保存文件,则执行保存操作
do_file_Save();
}
}

void MainWindow::do_file_New() //实现新建文件的功能
{
do_file_SaveOrNot();
isSaved = false;
curFile = tr("未命名.txt");
setWindowTitle(curFile);
ui->textEdit->clear(); //清空文本编辑器
ui->textEdit->setVisible(true); //文本编辑器可见
};

void MainWindow::do_file_Save() //保存文件
{
if(isSaved){ //如果文件已经被保存过,直接保存文件
saveFile(curFile);
}
else{
do_file_SaveAs(); //如果文件是第一次保存,那么调用另存为
}
}

void MainWindow::do_file_SaveAs() //文件另存为
{
QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile);
//获得文件名
if(!fileName.isEmpty()) //如果文件名不为空,则保存文件内容
{
saveFile(fileName);
}
}
bool MainWindow::saveFile(const QString& fileName)
//保存文件内容,因为可能保存失败,所以具有返回值,来表明是否保存成功
{
QFile file(fileName);
if(!file.open(QFile::WriteOnly | QFile::Text))
//以只写方式打开文件,如果打开失败则弹出提示框并返回
{
QMessageBox::warning(this,tr("保存文件"),tr("无法保存文件 %1:\n %2").arg(fileName).arg(file.errorString()));
return false;
}//%1,%2 表示后面的两个arg 参数的值
QTextStream out(&file); //新建流对象,指向选定的文件
out << ui->textEdit->toPlainText(); //将文本编辑器里的内容以纯文本的形式输出到流对象中
isSaved = true;
curFile = QFileInfo(fileName).canonicalFilePath(); //获得文件的标准路径
setWindowTitle(curFile); //将窗口名称改为现在窗口的路径
return true;
}
#endif // MAINWINDOW_H


main.cpp
#include "mainwindow.h"
#include <QTextCodec> //加入头文件
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
MainWindow w;
w.show();

return a.exec();
}


mainwindow.cpp

#include "mainwindow.h"
#include <QtGui> //加入头文件
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
isSaved = false;

curFile=tr("未命名.txt");
setWindowTitle(curFile);

ui->setupUi(this);
}

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


.pro
#-------------------------------------------------
#
# Project created by QtCreator 2013-05-10T07:00:45
#
#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = MainWindow
TEMPLATE = app


SOURCES +=main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

RESOURCES += \
men.qrc


最后报错

...全文
7708 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_30928633 2015-10-26
  • 打赏
  • 举报
回复
我也出现了这个问题,最后怎么解决的
OuterST 2013-05-11
  • 打赏
  • 举报
回复
求助啊,大神么么哒
OuterST 2013-05-11
  • 打赏
  • 举报
回复
引用
目前看出两个问题: 1:以后凡是QObject的子类(有Q_OBJECT宏),就要把函数体写到cpp文件里,头文件里只写声明,在Qt里有这个特殊要求。 2:ui->setupUi(this);应该在构造函数的第一行。
第一种果然有用,第二个暂时还不理解,不过谢谢啦。。
jdwx 2013-05-11
  • 打赏
  • 举报
回复
目前看出两个问题: 1:以后凡是QObject的子类(有Q_OBJECT宏),就要把函数体写到cpp文件里,头文件里只写声明,在Qt里有这个特殊要求。 2:ui->setupUi(this);应该在构造函数的第一行。
OuterST 2013-05-10
  • 打赏
  • 举报
回复

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧