2014-11-06 843 views
0
#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
#include <QMainWindow> 
#include <QFile> 
#include <QFileDialog> 
#include <QTextStream> 
#include <QStandardItemModel> 

namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow{ 
    Q_OBJECT 
public: 
    Ui::MainWindow *ui; 
    QList<QStringList> csv; 
    QStandardItemModel *model; 
    QList<QStandardItem*> standardItemList; 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private slots: 
    void on_action_Open_triggered(); 
    void checkString(QString &temp, QChar ch = 0); 
}; 

#endif // MAINWINDOW_H 

maindwindow.cpp未声明的标识符(头文件包含)

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <iostream> 
#include <QDebug> 

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QObject::connect(ui->Open, SIGNAL(clicked()), 
        this,SLOT(on_action_Open_triggered())); 
} 

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

void MainWindow::on_action_Open_triggered() 
{ 

    model = new QStandardItemModel(this); 
    ui->tableView->setModel(model); 

    QString fileName = QFileDialog::getOpenFileName(this, "Open CSV file",QDir::currentPath(), "csv (*.csv)"); 
    QFile file(fileName); 

    if (file.open(QIODevice::ReadOnly)) 
    { 

     QString data = file.readAll(); 
     data.remove(QRegExp("\r")); // remove all carriage return characters 
     QString temp; 
     QChar ch; 
     QTextStream instream (&data); 

     while (!instream.atEnd()) 
     { 
      instream >> ch; 
      if (ch == ',') 
       checkString(temp, ch); 
      else if (ch == '\n') 
       checkString(temp, ch); 
      else if (instream.atEnd()) 
      { 
       temp.append(ch); 
       checkString(temp); 
      } else 
       temp.append(ch); 
     } 
    } 
} 

void MainWindow::checkString(QString &temp, QChar ch) 
{ 

    if (temp.count("\"")%2 == 0) 
    { 
     if (temp.startsWith(QChar('\"')) && temp.endsWith(QChar('\"'))) 
     { 
      temp.remove(QRegExp("^\"")); 
      temp.remove(QRegExp("\"$")); 
     } 

     temp.replace("\"\"", "\""); 
     QStandardItem *item = new QStandardItem(temp); 
     standardItemList.append(item); 

     if (ch != QChar(',')) 
     { 
     } 

     temp.clear(); 
    } else 
     temp.append(ch); 
} 

void something() 
{ 
    qDebug() << standardItemList; 
} 

我被告知standardItemList,在一些功能未声明的标识符(为什么不是在checkstring功能?)。不过,我已经包含了mainwindow.h,并且包含了一个standardItemList的定义。它有事可做含*项目standardItemList和被内checkString

+2

'checkString'是'class MainWindow'的成员函数,'something'不是。 – 2014-11-06 08:43:25

+0

非常感谢您在Java之后使用C++编写一个相当大的挑战,因为还有很多需要记住的东西,所以错过了很多 – user4217633 2014-11-06 08:47:39

+0

@ user4217633您编写了Java?你可以使用[Qt Jambi](http://qt-jambi.org/),它是为Java用户制作的。 – Tay2510 2014-11-06 08:53:13

回答

0
#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
#include <QMainWindow> 
#include <QFile> 
#include <QFileDialog> 
#include <QTextStream> 
#include <QStandardItemModel> 

namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow{ 
    Q_OBJECT 
public: 
    Ui::MainWindow *ui; 
    QList<QStringList> csv; 
    QStandardItemModel *model; 
    QList<QStandardItem*> standardItemList; 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private slots: 
    void on_action_Open_triggered(); 
    void checkString(QString &temp, QChar ch = 0); 
    void something(); 
}; 

void MainWindow::something() 
{ 
    qDebug() << standardItemList; 
} 

checkString声明是一个私有成员,因此你不能这样standardItemList没有定义类的外部调用它。

+0

感谢您的意见:) – user4217633 2014-11-06 12:07:27