请教各位高手:
问题说明:有一个文本文件(test.txt)里面是一行是一条记录
我需要把所有的记录读到一个表里
我用Qt 4的Designer 设计了一个主
界面并在上面画了个QTableWidget 控件,生成一个ui文件(opentext.ui),
运用的编译器是VS.net2003的c++编译器
但是我现在的问题是能够读入,但是当重新读入时或读入其他的txt文件时就出错了,请问问题在哪儿?
下面是部分代码:
//opentext.h
#ifndef OPENTEXT_H
#define OPENTEXT_H
#include <QMainWindow>
#include <QTableWidgetItem>
#include <QTableWidget>
#include "ui_opentext.h"
class OpenText : public QMainWindow, public Ui::OpenText
{
    Q_OBJECT
public:
    OpenText(QWidget *parent = 0);
    bool readFile(const QString &fileName);
    bool moveFile(const QString &fileName);
    bool loadFile(const QString &fileName);
    void clear(QTableWidget *,int ,int);
private slots:
    void open();
    bool save();
    void about();
private:
    void createActions();
    bool saveFile(const QString &fileName);
    bool okToContinue();
    void setCurrentFile(const QString &fileName);
    QString strippedName(const QString &fullFileName);
    QString curFile;    
};
#endif
//opentext.cpp
#include <QtGui>
#include "opentext.h"
#include <QTextStream>
#include <QStringList>
OpenText::OpenText(QWidget *parent)
    : QMainWindow(parent)
{
    setupUi(this);//初始化主界面
    createActions();
    clear(opentable,100,14);
    setCurrentFile("");    
}
void OpenText::createActions()
{
     OpenAction->setShortcut(tr("Ctrl+O"));
    OpenAction->setStatusTip(tr("Open an existing txt file"));
    connect(OpenAction, SIGNAL(triggered()), this, SLOT(open()));
    SaveAction->setShortcut(tr("Ctrl+S"));
    SaveAction->setStatusTip(tr("Save the txt to disk"));
    connect(SaveAction, SIGNAL(triggered()), this, SLOT(save()));
    AboutAction->setStatusTip(tr("Show the application's About box"));
    connect(AboutAction, SIGNAL(triggered()), this, SLOT(about()));
}
bool OpenText::readFile(const QString &fileName)
{    //读入文件    
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly)) 
    {
        QMessageBox::warning(this, tr("OpenText"),
                             tr("Cannot read file %1:\n%2.")
                             .arg(file.fileName())
                             .arg(file.errorString()));
        return false;
    }
    QTextStream in(&file);    
    int row=0;
    int clm=0;
//    clear(opentable);
    while (!in.atEnd()) 
    {
        QString strLineText = in.readLine();
        QStringList list1 = strLineText.split(QRegExp("\\s+"),QString::SkipEmptyParts);//以空格为基础拆分字符串
        QTableWidgetItem  *newItem=new QTableWidgetItem[list1.size()];        
        if(list1.size()>clm&&list1.size()<=14)
        {//保存最大列
            clm=list1.size();
        }
        else if(list1.size()>14)
        {
            clm=14;
        }        
        opentable->setRowCount(row+1);
        for(int column=0;column<list1.size();column++)
        {
            opentable->setItem(row, column, &newItem[column]); 
            newItem[column].setText(list1.value(column));
        }        
        ++row;        
    }    
    file.close();    
    return true;
}
bool OpenText::okToContinue()
{
    if (false/*filechanged(opentable)*/) 
    { 
        int r = QMessageBox::warning(this, tr("text file"),
                        tr("The document has been modified.\n "
                           "Do you want to save your changes?"),
                        QMessageBox::Yes | QMessageBox::Default,
                        QMessageBox::No,
                        QMessageBox::Cancel | QMessageBox::Escape);
        if (r == QMessageBox::Yes) {
            return save();
        } else if (r == QMessageBox::Cancel) {
            return false;
        }
    }
    return true;
}
void OpenText::open()
{
    if (okToContinue()) {
        QString fileName = QFileDialog::getOpenFileName(this,
                                   tr("Open Text File"), ".",
                                   tr("txt files (*.txt)"));
        if (!fileName.isEmpty())
            loadFile(fileName);
    }
}
bool OpenText::save()
{
    /*
    if (fileName.isEmpty()) {
        return saveAs();
    } else {
        return saveFile(fileName);
    }
    */
    return true;
}
bool OpenText::loadFile(const QString &fileName)
{
    if (!readFile(fileName)) {
        statusBar()->showMessage(tr("Loading canceled"), 2000);
        return false;
    }
    setCurrentFile(fileName);
    statusBar()->showMessage(tr("File loaded"), 2000);
    return true;
}
void OpenText::clear(QTableWidget *table,int row,int clm)
{    
table->setRowCount(0); //此行出错    table->setColumnCount(0);
    table->setColumnCount(clm);
    table->setRowCount(row);
    QString filetext[14]={"Number","ID","price","column4","column5","column6","column7","column8","column9","column10","column11","column12","column13","column14"};
    for (int i = 0; i < 14; ++i) {
        QTableWidgetItem *item = new QTableWidgetItem;
        item->setText(filetext
);
        table->setHorizontalHeaderItem(i, item);
        
        
    }
    
    opentable->setCurrentCell(0, 0);
}
void OpenText::setCurrentFile(const QString &fileName)
{
    curFile = fileName;
    setWindowModified(false);
    QString shownName = "Untitled";
    if (!curFile.isEmpty()) {
        shownName = strippedName(curFile);
    }
    setWindowTitle(tr("%1[*] - %2").arg(shownName)
                                   .arg(tr("OpenText")));
}
QString OpenText::strippedName(const QString &fullFileName)
{
    return QFileInfo(fullFileName).fileName();
}
void OpenText::about()
{
    QMessageBox::about(this, tr("About OpenText"),
            tr("<h2>OpenText 1.1</h2>"
               "<p>Copyright ? 2008 Software Inc."
               "<p>OpenText is a small application that "
               "demonstrates QAction, QMainWindow, QMenuBar, "
               "QStatusBar, QTableWidget, QToolBar, and many other "
               "Qt classes."));
}[ 此贴被txiejun在2008-08-05 15:06重新编辑 ]