QT学习(三)文件操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/anpingbo/article/details/55804854

一、MainWindow设置

1.    设置窗口内容

窗口包含菜单栏、工具栏、主窗口内容和状态栏。

新建QTextEdit或者其他窗口内容(如 spreadsheet等),然后将之放置窗口中间。

    textEdit=new QTextEdit(this);
    setCentralWidget(textEdit);
    setWindowTitle(tr("Text"));

setWindowIcon(QIcon(":/images/icon.png"));

在建立菜单栏和工具栏之前需要建立操作选项,

    newAction=new QAction(tr("new"), this);
    newAction->setIcon(QIcon(":/images/new.png"));
    newAction->setShortcut(QKeySequence::New);
    newAction->setStatusTip("create a new file");
    connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));

上述建立了一个new的操作,用于新建文件,并且为其设置了图标、快捷键以及操作状态显示。并且当其按下会调用newFile函数。

接下来建立菜单栏和工具栏,

    fileMenu=menuBar()->addMenu(tr("File"));
    fileMenu->addAction(newAction);

menuBar为MainWindow类函数,其返回QMenuBar类指针,通过addMenu来建立一个Menu,通过addAction来添加操作选项。

    fileToolBar=addToolBar(tr("file"));
    fileToolBar->addAction(newAction);

上述加入ToolBar以及将newAction加入ToolBar中。

    textLabel=new QLabel(tr("Status"));
    textLabel->setAlignment(Qt::AlignHCenter);
    textLabel->setMinimumSize(textLabel->sizeHint());
    statusBar()->addWidget(textLabel);

上述为设置状态栏,可以在状态栏中加入Qwidget,例如QLabel,并且为其设置大小以及安排位置。

二、文件操作

1.    判断窗口是否更改

窗口更改主要为判断窗口内容是否更改,即textEdit内容是否更改。

bool MainWindow::okToContinue(){
    if(isWindowModified()){
        int r=QMessageBox::warning(this, tr("Text"),
                                   tr("the text has been modified.\n"
                                      "Do you want to save it ?"),
                                   QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
        if(r==QMessageBox::Yes)
            return save();
        else if(r==QMessageBox::Cancel)
            return false;
    }
    return true;
}
 
 
void MainWindow::documentModified(){
 
    setWindowModified(textEdit->document()->isModified());
}

 

在documentModified函数中,利用textEdit调用isModified函数来判断内容是否修改,并且将更改结果传给主窗口。在okToContinue中通过isWindowModified来判断主窗口是否修改。如果修改过,就会弹出消息框,让你进行选择。

 

2.    文件保存和导入

文件读取类似于C++中对文件读取,也是通过流的方式。

bool MainWindow::saveFile(const QString &fileName){
    QFile file(fileName);
    if(!file.open(QFile::WriteOnly)){
        QMessageBox::warning(this, tr("Text"), tr("cannot open the file %1").arg(file.fileName()));
        return false;
    }
 
    QTextStream out(&file);
    QApplication::setOverrideCursor(Qt::WaitCursor);
    out<<textEdit->toPlainText();
 
    QApplication::restoreOverrideCursor();
    setWindowModified(false);
    setCurrentFile(fileName);
    statusBar()->showMessage(tr("File saved"), 2000);
    return true;
 
 
 
}

QT中有QFile用于打开文件,用QTextStream来讲文件转换为数据流。上述中通过调用toPlainText函数获得了textEdit中的内容,然后将之输出到文件中。

setOverrideCursor为对光标进行设置,在文件到处过程中,光标是等待类型,完成后恢复原状。

同时状态栏中显示文件保存的状态,显示2s。

文件的导入也类似:

void MainWindow::loadFile(const QString &fileName){
    QFile file(fileName);
    if(!file.open(QFile::ReadOnly)){
        QMessageBox::warning(this, tr("Text"), tr("cannot open the file %1").arg(file.fileName()));
        return;
    }
    QTextStream in(&file);
    QApplication::setOverrideCursor(Qt::WaitCursor);
    textEdit->setPlainText(in.readAll());
    QApplication::restoreOverrideCursor();
 
    setWindowModified(false);
    statusBar()->showMessage(tr("Loading file"), 2000);
 
}

3.    复制和剪切

虽然QTextEdit类中有copy和paste函数用于完成复制和剪切等操作,但是本文还是用独立函数来完成。

void MainWindow::copy(){
    QTextCursor cursor=textEdit->textCursor();
    QString str=cursor.selectedText();
    QApplication::clipboard()->setText(str);
}

Copy和剪切都是需要确定textEdit中选择的内容,识别内容选择是通过QTextCursor类实现的,其可以对选择的文本进行操作。textCursor返回光标位置,selectedText函数返回选中内容,通过调用clipBoard来使用剪切板,可以将选中内容复制到剪切板,以便下一次使用。

void MainWindow::paste(){
    QTextCursor cursor=textEdit->textCursor();
 
    if(cursor.hasSelection())
        cursor.clearSelection();
    QString str=QApplication::clipboard()->text();
    cursor.insertText(str);
 
}

调用剪切板来将之内容粘贴到textEdit中。

 

 

4.    帮助选项

帮助选项直接调出信息框即可。

void MainWindow::about(){
    QMessageBox::about(this, tr(" About Text"), tr("This is my text"));
}

猜你喜欢

转载自blog.csdn.net/anpingbo/article/details/55804854