2016-08-21 7 views
0

私はC++とQTを使って簡単なテキストエディタに保存機能を追加しようとしています。私はあなたのファイルを保存し、同じインデックスを持つ新しいタブを開き、タブのタイトルとして新しいファイルの名前を持っているときに現在のタブを閉じようとしています。QT With C++:Save Asを実装する方法

QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), "", tr("All Files (*)")); 
if (fileName.isEmpty()) 
     return; 
else 
{ 
    QFile file(fileName); 
    if (!file.open(QIODevice::WriteOnly)) 
    { 
     QMessageBox::information(this, tr("Unable to open file"), 
     file.errorString()); 
     return; 
    } 
    QTextStream out (&file);` 

    out << ui->plainTextEdit->toPlainText(); 


    QFileInfo FileData(file); 

    int currentTab = ui->tabWidget->currentIndex(); 
    ui->tabWidget->removeTab(currentTab); 
    QTextStream InputData(&file); 
    ui->tabWidget->insertTab(currentTab, new Form(), FileData.fileName()); 
    ui->tabWidget->setCurrentIndex(currentTab); 
    ui->plainTextEdit->setPlainText(InputData.readAll()); 

    file.flush(); 
    file.close(); 
} 

私は新しいファイルを保存しようと、それが選択した場所にファイルを保存し、ファイル名で現在のタブを置き換えますが、それはテキストにファイルを書き込みません:これは私のコードです窓。どんな助けも素晴らしいだろう。ここで

+0

教えてください: plainTextEditはどこですか? mainWindowまたはFormで、tabWidgetに追加しますか? あなたのコードから、plainTextEditは上記のコードがあるメインウィンドウにあるようです。 その場合、 "Form"に別のplainTextEditがあると、両方が異なっていることが分かり、そのコードは機能しません。 – Sumit

+0

@Sumit plainTextEditは形式になっているので、なぜ機能しないのかが分かります。 plainTextEditにはどうすればアクセスできますか? – connorb08

+0

Formterクラスに2つのパブリック関数をsetterとgetterとして追加する必要があります。下記のコードをご覧ください。 – Sumit

答えて

0

私のデモコードであり、動作しているようです:plainTextEdit

#include "form.h" 
#include "ui_form.h" 

Form::Form(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Form) 
{ 
    ui->setupUi(this); 
} 

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

QString Form::GetText() 
{ 
    return ui->plainTextEdit->toPlainText(); 
} 

void Form::SetText(QString text) 
{ 
    ui->plainTextEdit->setPlainText(text); 
} 

そしてQTabWidget

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include "form.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
} 

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

void MainWindow::on_pushButton_clicked() 
{ 
    ui->tabWidget->insertTab(0, new Form(), "My File"); 
    ui->tabWidget->setCurrentIndex(0); 
} 

void MainWindow::on_pushButton_2_clicked() 
{ 
    int currentIndex = ui->tabWidget->currentIndex(); 

    //Save the text to a file or a variable... 
    QString content = static_cast<Form*>(ui->tabWidget->widget(currentIndex))->GetText(); 

    ui->tabWidget->removeTab(currentIndex); 

    ui->tabWidget->insertTab(currentIndex, new Form(), "Saved File");//new name 
    static_cast<Form*>(ui->tabWidget->widget(currentIndex))->SetText(content); 
    ui->tabWidget->setCurrentIndex(currentIndex); 
} 

それが含まれているmainwindow.cppを持って

form.cpp私のために働いている、試してみてください。 ありがとうございます。

+0

pushButtonは "New File"、pushButton_2は "Save ..."または "Save as .."のようなものですが、すぐに返信するには名前を変更できませんでした。 – Sumit

関連する問題