QT程序运行时出错,烦请帮忙看看

Lusoel 2010-03-29 11:27:27
程序报如下错误:
Unhandled exception at 0x671d3226 (QtCored4.dll) in cuteEdit.exe: 0xC0000005: Access violation reading location 0x8b04c483.

原码如下:
//file cuteedit.h
#ifndef CUTEEDIT_H
#define CUTEEDIT_H

#include <QtGui/QMainWindow>
#include <QString>
#include "ui_cuteedit.h"

class cuteEdit : public QMainWindow, private Ui::cuteEditClass
{
Q_OBJECT

public:
cuteEdit(QWidget *parent = 0, Qt::WFlags flags = 0);
~cuteEdit();

private:
Ui::cuteEditClass ui;
void setupActions();

protected:
bool mayDiscardDocument();
void saveFile(const QString&);

public slots:
void newFile();
void loadFile();
void saveFile();
void saveFileAs();
void undo();
void redo();
void copy();
void about();

private:
QString mFilePath;
};

#endif // CUTEEDIT_H

//cuteedit.cpp
#include "cuteedit.h"
#include <QtGui/QApplication>
#include <QtGui/QLabel>
#include <QtGui/QFileDialog>
#include <QtGui/QMessageBox>
#include <QtGui/QStatusBar>

cuteEdit::cuteEdit(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
setupActions();
}

cuteEdit::~cuteEdit()
{

}

void cuteEdit::setupActions()
{
connect(action_Quit, SIGNAL(triggered(bool)), qApp, SLOT(quit()));
connect(actionOpen, SIGNAL(triggered(bool)), this, SLOT(loadFile()));
connect(action_Save, SIGNAL(triggered(bool)), this, SLOT(saveFile()));
connect(action_Save_as, SIGNAL(triggered(bool)), this, SLOT(saveFileAs()));

connect(textEdit, SIGNAL(copyAvailable(bool)), actionCo_Py, SLOT(setEnabled(bool)));
connect(textEdit, SIGNAL(undoAvailable(bool)), actionUndo, SLOT(setEnabled(bool)));
connect(textEdit, SIGNAL(redoAvailable(bool)), actionRedo, SLOT(setEnabled(bool)));

connect(actionCo_Py, SIGNAL(triggered(bool)), this, SLOT(copy()));
connect(actionUndo, SIGNAL(triggered(bool)), this, SLOT(undo()));
connect(actionRedo, SIGNAL(triggered(bool)), this, SLOT(redo()));

connect(action_About_me, SIGNAL(triggered(bool)), this, SLOT(about()));
}

void cuteEdit::loadFile()
{
QString filename = QFileDialog::getOpenFileName(this);
QFile file(filename);
if (file.open(QIODevice::ReadOnly| QIODevice::Text))
{
textEdit->setPlainText(QString::fromUtf8(file.readAll()));
mFilePath = filename;
this->statusBar()->showMessage(tr("File successfully loaded."), 3000);
}
}

void cuteEdit::saveFile()
{
if(mFilePath.isEmpty())
{
saveFileAs();
}
else
{
saveFile(mFilePath);
}
}

void cuteEdit::saveFile(const QString &name)
{
QFile file(name);
if (file.open(QIODevice::WriteOnly| QIODevice::Text))
{
file.write(textEdit->toPlainText().toUtf8());
this->statusBar()->showMessage(tr("File saved successfully."), 3000);
}
}

void cuteEdit::saveFileAs()
{
mFilePath = QFileDialog::getSaveFileName(this);
if(mFilePath.isEmpty())
{
return;
}

saveFile(mFilePath);
}

bool cuteEdit::mayDiscardDocument()
{
if (textEdit->document()->isModified())
{
QString filename = mFilePath;
if (filename.isEmpty())
{
filename = tr("Unnamed");
}

if (QMessageBox::question(this, tr("Save Document?"),
tr("You want to create a new document, but the "
"changes in the current document ’%1’ have not "
"been saved. How do you want to proceed?"),
tr("Save Document"), tr("Discard Changes") ))
{
saveFile();
}

return true;
}

return false;
}

void cuteEdit::newFile()
{
if (!mayDiscardDocument())
{
return;
}

textEdit->setPlainText("");
mFilePath = "";
}

void cuteEdit::undo()
{
textEdit->document()->undo();
}

void cuteEdit::redo()
{
textEdit->document()->redo();
}

void cuteEdit::copy()
{
textEdit->copy();
}

void cuteEdit::about()
{
QMessageBox::about(this, tr("About CuteEdit"),
tr("CuteEdit 1.0\nA Qt application example.\n"
"(c) 2006 Daniel Molkentin, Open Source Press"));
}

#ifndef UI_CUTEEDIT_H
#define UI_CUTEEDIT_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QStatusBar>
#include <QtGui/QTextEdit>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_cuteEditClass
{
public:
QAction *action_Open;
QAction *actionOpen;
QAction *action_Save;
QAction *action_Save_as;
QAction *action_Quit;
QAction *action_About_me;
QAction *action_Cut;
QAction *actionCo_Py;
QAction *actionPaste;
QAction *actionUndo;
QAction *actionRedo;
QWidget *centralWidget;
QTextEdit *textEdit;
QStatusBar *pStatusBar;
QMenuBar *menuBar;
QMenu *menuAdadfdf;
QMenu *menuEdit;
QMenu *menu_Help;

void setupUi(QMainWindow *cuteEditClass)
{
......
}
程序在ccp文件中的connect(action_Quit, SIGNAL(triggered(bool)), qApp, SLOT(quit()));就开始出错。
...全文
282 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fpcc 2010-03-30
  • 打赏
  • 举报
回复
你的意思是不是说你混淆了父类和子类的调用.
lizheng092 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lusoel 的回复:]

呵呵,搞定了。
是下面的语句有问题:
cuteEdit::cuteEdit(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
setupActions();
}
红色的应该只是调用的基类的。
[/Quote]

原来如此……
Lusoel 2010-03-29
  • 打赏
  • 举报
回复
有,在ui_cuteedit.h中的setupUi中有的,如下:
void setupUi(QMainWindow *cuteEditClass)
{
if (cuteEditClass->objectName().isEmpty())
cuteEditClass->setObjectName(QString::fromUtf8("cuteEditClass"));
cuteEditClass->setEnabled(true);
cuteEditClass->resize(600, 400);
action_Open = new QAction(cuteEditClass);
action_Open->setObjectName(QString::fromUtf8("action_Open"));
actionOpen = new QAction(cuteEditClass);
actionOpen->setObjectName(QString::fromUtf8("actionOpen"));
action_Save = new QAction(cuteEditClass);
action_Save->setObjectName(QString::fromUtf8("action_Save"));
action_Save_as = new QAction(cuteEditClass);
action_Save_as->setObjectName(QString::fromUtf8("action_Save_as"));
action_Quit = new QAction(cuteEditClass);
action_Quit->setObjectName(QString::fromUtf8("action_Quit"));
action_About_me = new QAction(cuteEditClass);
action_About_me->setObjectName(QString::fromUtf8("action_About_me"));
action_Cut = new QAction(cuteEditClass);
action_Cut->setObjectName(QString::fromUtf8("action_Cut"));
actionCo_Py = new QAction(cuteEditClass);
actionCo_Py->setObjectName(QString::fromUtf8("actionCo_Py"));
actionPaste = new QAction(cuteEditClass);
actionPaste->setObjectName(QString::fromUtf8("actionPaste"));
actionUndo = new QAction(cuteEditClass);
actionUndo->setObjectName(QString::fromUtf8("actionUndo"));
actionRedo = new QAction(cuteEditClass);
actionRedo->setObjectName(QString::fromUtf8("actionRedo"));
centralWidget = new QWidget(cuteEditClass);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
textEdit = new QTextEdit(centralWidget);
textEdit->setObjectName(QString::fromUtf8("textEdit"));
textEdit->setEnabled(true);
textEdit->setGeometry(QRect(0, 70, 592, 278));
QFont font;
font.setFamily(QString::fromUtf8("Courier"));
textEdit->setFont(font);
textEdit->setLineWrapMode(QTextEdit::NoWrap);
cuteEditClass->setCentralWidget(centralWidget);
pStatusBar = new QStatusBar(cuteEditClass);
pStatusBar->setObjectName(QString::fromUtf8("pStatusBar"));
cuteEditClass->setStatusBar(pStatusBar);
menuBar = new QMenuBar(cuteEditClass);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 20));
menuBar->setAutoFillBackground(true);
menuAdadfdf = new QMenu(menuBar);
menuAdadfdf->setObjectName(QString::fromUtf8("menuAdadfdf"));
menuEdit = new QMenu(menuBar);
menuEdit->setObjectName(QString::fromUtf8("menuEdit"));
menu_Help = new QMenu(menuBar);
menu_Help->setObjectName(QString::fromUtf8("menu_Help"));
cuteEditClass->setMenuBar(menuBar);

menuBar->addAction(menuAdadfdf->menuAction());
menuBar->addAction(menuEdit->menuAction());
menuBar->addAction(menu_Help->menuAction());
menuAdadfdf->addAction(action_Open);
menuAdadfdf->addAction(actionOpen);
menuAdadfdf->addAction(action_Save);
menuAdadfdf->addSeparator();
menuAdadfdf->addAction(action_Save_as);
menuAdadfdf->addAction(action_Quit);
menuEdit->addAction(action_Cut);
menuEdit->addAction(actionCo_Py);
menuEdit->addAction(actionPaste);
menuEdit->addAction(actionUndo);
menuEdit->addAction(actionRedo);
menu_Help->addAction(action_About_me);

retranslateUi(cuteEditClass);

QMetaObject::connectSlotsByName(cuteEditClass);
} // setupUi
  • 打赏
  • 举报
回复
空指针操作...

action_Quit你看看你有进行分配空间没?

action_Quit = new QAction;
Lusoel 2010-03-29
  • 打赏
  • 举报
回复
加了之后编译不过。
qApp不是指针吗?
1>------ Build started: Project: cuteEdit, Configuration: Debug Win32 ------
1>Compiling...
1>cuteedit.cpp
1>.\cuteedit.cpp(22) : error C2102: '&' requires l-value
benbenmajia 2010-03-29
  • 打赏
  • 举报
回复
程序在ccp文件中的connect(action_Quit, SIGNAL(triggered(bool)), qApp, SLOT(quit()));就开始出错

connect(action_Quit, SIGNAL(triggered(bool)), &qApp, SLOT(quit()));?
moon6623 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lusoel 的回复:]
呵呵,搞定了。
是下面的语句有问题:
cuteEdit::cuteEdit(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
setupActions();
}
红色的应该只是调用的基类的。
[/Quote]

恭喜
Lusoel 2010-03-29
  • 打赏
  • 举报
回复
呵呵,搞定了。
是下面的语句有问题:
cuteEdit::cuteEdit(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
setupActions();
}
红色的应该只是调用的基类的。

16,212

社区成员

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

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