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);
}