可以通过以下步骤实现在widget中实现另存为功能,并在弹出的对话框中实现新建文件夹的功能:
添加一个QPushButton对象,用于触发另存为操作。
在按钮的clicked信号中,使用QFileDialog::getSaveFileName()函数获取用户选择的文件名和保存路径。
如果用户在选择文件名时输入了新文件夹的名称,则需要创建该文件夹。可以使用QDir::mkdir()函数来创建新文件夹。
如果成功创建了新文件夹,则使用QFile类或QTextStream类将数据写入指定路径下的文件中。
下面是一个简单的示例代码:
void Widget::saveAs()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), ".", tr("Text Files (*.txt)"));
if(!fileName.isEmpty())
{
// extract the file name and path
QFileInfo fileInfo(fileName);
QString filePath = fileInfo.path();
QString fileBaseName = fileInfo.baseName();
QString fileSuffix = fileInfo.suffix();
// check if a new folder needs to be created
QString newFolderName = QInputDialog::getText(this, tr("New Folder"), tr("Enter New Folder Name:"), QLineEdit::Normal, "");
if(!newFolderName.isEmpty())
{
QString newFolderPath = filePath + "/" + newFolderName;
QDir dir(newFolderPath);
if(!dir.exists())
{
if(dir.mkdir(newFolderPath))
{
QFile file(newFolderPath + "/" + fileBaseName + "." + fileSuffix);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&file);
out << ui->textEdit->toPlainText();
file.close();
}
}
}
}
else
{
QFile file(fileName);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&file);
out << ui->textEdit->toPlainText();
file.close();
}
}
}
}
在这个示例中,我们使用了QFileDialog::getSaveFileName()函数获取用户选择的文件名和路径,并使用QInputDialog::getText()函数获取新文件夹名称。然后,我们通过QDir::mkdir()函数创建新文件夹,并使用QFile类将数据写入指定路径下的文件中。
如果用户没有输入新文件夹名称,则直接将文件保存到用户选择的路径中。