QT QTextEdit初始化错误

梅子酱呐 2017-12-23 02:05:04
我想写个简单的打开txt文件,然后把文件的内容显示在界面上,照着QT5开发及实例上第五章主窗口的例子抄了我需要的一部分,然后调试到showwidget->text->document()->isEmpty()时出现错误,百度后发现指针错了,show->text->document()不可访问,text初始化错了,跪求大神指教很多不懂。代码如下。。请求指教

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QLabel>
#include "showwidget.h"
class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void createActions();
void createMenus();
protected slots:
void showfile();
void loadFile(QString FileName);
private:
QAction * openFileAction;
QMenu *fileMenu;
QString fileName;
ShowWidget *showwidget;

};

#endif // MAINWINDOW_H




#ifndef SHOWWIDGET_H
#define SHOWWIDGET_H

#include <QWidget>
#include <QLabel>
#include <QTextEdit>
class ShowWidget : public QWidget
{
Q_OBJECT
public:
explicit ShowWidget(QWidget *parent = 0);
QTextEdit *text;
signals:

public slots:
};

#endif // SHOWWIDGET_H

//mainwindow.cpp
#include "mainwindow.h"
#include <QAction>
#include <QMenuBar>
#include <QFileDialog>
#include <QTextStream>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
createActions();
createMenus();
}

MainWindow::~MainWindow()
{

}

void MainWindow::createActions()
{
openFileAction=new QAction(QIcon("open.png"),tr("打开"),this);
connect(openFileAction,SIGNAL(triggered()),this,SLOT(showfile()));
}
void MainWindow::createMenus()
{
fileMenu= menuBar()->addMenu(tr("文件"));
fileMenu->addAction(openFileAction);
}

void MainWindow::showfile()
{
fileName=QFileDialog::getOpenFileName(this);
if(!fileName.isEmpty())
{
if(showwidget->text->document()->isEmpty())//这里错了,text未能初始化成功
{
loadFile(fileName);
}
else
{
MainWindow *newMainWindow =new MainWindow;
newMainWindow->show();
newMainWindow->loadFile(fileName);
}
}
}

void MainWindow::loadFile(QString filename)
{

printf("file name:%s\n",filename.data());
QFile file(filename);
if(file.open(QIODevice::ReadOnly|QIODevice::Text))
{
QTextStream textStream(&file);
while(!textStream.atEnd())
{
showwidget->text->append(textStream.readLine());//这里也会出错
printf("read line\n");
}
printf("end\n");
}
}

//showwidget.cpp
#include "showwidget.h"
#include <QHBoxLayout>
ShowWidget::ShowWidget(QWidget *parent) : QWidget(parent)
{
text=new QTextEdit;
QHBoxLayout *mainLayout=new QHBoxLayout(this);
mainLayout->addWidget(text);
}
...全文
692 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
judesmorning 2018-01-05
  • 打赏
  • 举报
回复
text没有在界面里new
lyz007 2018-01-05
  • 打赏
  • 举报
回复
另外,这里ShowWidget *showwidget;只定义了一个指针,应该在构造函数里用new 来创建对象的实例
lyz007 2018-01-05
  • 打赏
  • 举报
回复
showwidget->text->append(textStream.readLine());//这里也会出错 text是属性,是只读的,应该用setext()
  • 打赏
  • 举报
回复
你的MainWindow是主窗口,其中没有见你实例化ShowWidget。所以其中的text也只是指针,没有具体实例对应,你调用其中代码必定报错。
  • 打赏
  • 举报
回复
你的text控件在哪里new的?

16,211

社区成员

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

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