从另一个类的lineEdit中使用路径创建文件。

问题描述 投票:0回答:1

在我的项目中,我有一个 MainWindow.cpp 文件,其中包含 "New Txt File "按钮。该按钮打开了 NewTxtFileName 对话框中,我可以按 "Create "按钮创建一个新的text.txt文件,然后打开一个保存对话框,我可以选择目录和新文件的名称。

然后打开一个保存对话框,我可以选择新文件的目录和名称。当完成后,文件的完整路径被打印在 "Path "行编辑器里面,可以用来打开第二个对话框。第二个对话框是 WriteFileDialog 其中我可以添加作者的名字,然后点击 "Ok",文件就被写入了。

enter image description here

但似乎行编辑器中的文件路径并没有被使用。MainWindow 类,以便调用 WriteFileDialog.

如果我更换了 TxtFile 中的变量 NewTxtFileName::getpath() 类与 QString TxtFile= QDir::homePath+QDir::separator()+"untitled.txt" 然后打开第二个dilog,将文件和内容写入新的位置。

重要的是,文件路径打印在 "路径 "行编辑pe。如何正确地使用所需的文件位置和名称来打开的? WriteFileDialog 并保存它?

MainWindow.cpp

void MainWindow::createTxtFileName()
{
    newtxtfilename = new NewTxtFileName(this);
    connect(newtxtfilename,SIGNAL(ready()),this,SLOT(writefile()));
    newtxtfilename->show();
    newtxtfilename->activateWindow();
}


void MainWindow::writefile()
{
    newfilename = new NewTxtFileName(this);
    QString fileName = newfilename->getpath();

    if (fileName.isEmpty()) return;

    newwritedialog = new WriteFileDialog(this,fileName);
    connect(newwritedialog,SIGNAL(opensignal()),this,SLOT(openfile()));
    newwritedialog->show();
    newwritedialog->activateWindow();

}

NewTxtFileName.cpp

void NewTxtFileName::on_CreateFileButton_clicked()
{
    QString filePathName = QFileDialog::getSaveFileName(this, tr("File Name"),
            QDir::homePath()+QDir::separator()+"untitled.txt","txt Files (*.txt)");

    ui->Path->setText(filePathName);
    if (filePathName.isEmpty()) return;
}

QString NewTxtFileName::getpath()
{
    QString TxtFile= ui->Path->text();
    //QString TxtFile= QDir::homePath+QDir::separator()+"untitled.txt"
    QString path = TxtFile;
    return path;
}

void NewTxtFileName::on_OkButton_accepted() //15/5
{
    ready();
    close();
}

WriteFileDialog.cpp

WriteFileDialog::WriteFileDialog(QWidget *parent,QString fileName) :
    QDialog(parent),
    ui(new Ui::WriteFileDialog)
{
    ui->setupUi(this);
    connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(create()));

    txtfileName = fileName;
    setWindowTitle(QFileInfo(fileName).fileName());

}

void WriteFileDialog::create() {

    QString fileText = "Author Name : ";
    QString fileText += ui->AuthorlineEdit->text();

    QFile file(txtfileName);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
    return;
    QTextStream textStream(&file);
    textStream.flush();
    textStream << fileText;
    file.close();

    emit opensignal(txtfileName);

}

WriteFileDialog::~WriteFileDialog()
{
    delete ui;
}
c++ qt dialog signals-slots qlineedit
1个回答
1
投票

这是因为你正在创建一个新的实例,即 NewTxtFileName 其中你没有设置路径。

我不得不说你的代码有点乱,我觉得你应该重写信号和槽的工作流程,反正只要注释这一行就可以了,如果 写文件 总是在 createTxtFileName:

void MainWindow::writefile()
{
    //You are creating a new instance of the NewTxtFileName window where you never set the path
    //newfilename = new NewTxtFileName(this);
    QString fileName = newfilename->getpath();

    //also try using QDebug so that you know what fileName contains
    qDebug() << fileName;
    if (fileName.isEmpty()) return;

    newwritedialog = new WriteFileDialog(this,fileName);
    connect(newwritedialog,SIGNAL(opensignal()),this,SLOT(openfile()));
    newwritedialog->show();
    newwritedialog->activateWindow();

}
© www.soinside.com 2019 - 2024. All rights reserved.