C++ 为什么QFileDialog::getOpenFileName不';不行?

C++ 为什么QFileDialog::getOpenFileName不';不行?,c++,qt,model-view-controller,qfile,qfiledialog,C++,Qt,Model View Controller,Qfile,Qfiledialog,在字符串中,路径是正确的,但它不会将字符串放入我的表中。没有错误或警告。例如,当我这样做时: meinModel->setData(filename, filename); 它查看字符串:E:/test.txt 我有一个QTableView和一个QAbstractTableModel void View::OpenFileButtonClicked() { QString filename = QFileDialog::getOpenFileName(0, Q

在字符串中,路径是正确的,但它不会将字符串放入我的表中。没有错误或警告。例如,当我这样做时:

 meinModel->setData(filename, filename);
它查看字符串:E:/test.txt

我有一个QTableView和一个QAbstractTableModel

 void View::OpenFileButtonClicked()
    {
        QString filename = QFileDialog::getOpenFileName(0, QString(), QString()
                                             ,tr("Data (*.txt)"));
        fileMy = new QFile(filename);
        QTextStream stream (&*fileMy);  
        while (!stream.atEnd())
            {
              QString line = stream.readLine();
              QStringList list = line.split(",");
              QString firststring;
              firststring = (list.first());
              QString secondstring;
              secondstring = (list.last());
             // Strings are sent to Model which view they in my tableview.
              meinModel->setData(firststring, secondstring);
            }        
    }
奇怪,因为这是有效的:

  void View::FileButtonClicked()
{
    QString fileName;
    if (txtPfad->text().length() > 0 )
    {
        fileMy = new QFile(txtPfad->text());
    } 
    else 
    {   fileMy = new QFile("E:\\test.txt"); }

    if (!fileMy->open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QMessageBox::information(this, tr("ERROR"), tr("Daten konnten icht eingelesen werden"));
        return;
    }
    QTextStream stream (&*fileMy);  
    while (!stream.atEnd())
        {
         QString line = stream.readLine();
         QStringList list = line.split(",");
         QString firststring;
         firststring = (list.first());
         QString secondstring;
         secondstring = (list.last());
         meinModel->setData(firststring, secondstring);
        }   
}   

您在
OpenFileButtonClicked
中未打开文件:

if (!fileMy->open(QIODevice::ReadOnly | QIODevice::Text))
{
    QMessageBox::information(this, tr("ERROR"), tr("Daten konnten icht eingelesen werden"));
    return;
}

&*fileMy
实际上是
fileMy
的值,如果取消
QFileDialog
,返回的字符串将为空堆栈上的create QFile对象。您不需要将此指针保持在此方法之外。否则,您将需要删除使用
new
创建的每个对象。my setData工作正常。我只需要给她发两条短信。在我使用meinModel->setData(firststring,secondstring)的其他方法中;它起作用了。。只有用这种方法。。