Qt学习笔记(三)——记事本

实现过程中遇到问题的笔记:
1、实现文件另存为和保存功能时,首先要对文件进行file.open()打开操作,对文件的操作结束后,使用file.close()对操作后的文件关闭。
2、实现页面设置功能可以通过调用QPageSetupDialog类来实现。如下:

QPageSetupDialog *PageSetup = new QPageSetupDialog();
PageSetup->show();

3、打印功能实现时需要在.pro文件中添加:
QT += printsupport
4、替换功能实现。使用connect函数,将替换按钮与替换函数连接起来。
其中btn_ex表示替换按钮,text_o表示想要替换的文本,text_n表示替换为的文本内容。

    connect(btn_ex, &QPushButton::clicked,[=](){
        if(ui->Text->find(text_o->text()))
        {
            ui->Text->textCursor().insertText(text_n->text());
        }
        else
        {
            QMessageBox::information(this, "结果", "没有内容,不能替换“"+text_o->text()+"”", QMessageBox::Yes);
            exchangeDlg->close();
        }
    });

实现功能:
实现功能实现功能
记事本界面
代码实现:
1、新建

void MainWindow::on_actionnew_triggered()   //新建
{
    currentFile.clear();
    ui->Text->setText(QString());
}

2、新建窗口

void MainWindow::on_actionnewwindow_triggered()  //新建窗口
{
    MainWindow *newwindow=new MainWindow;
    newwindow->show();
}

3、打开文件

void MainWindow::on_actionopen_triggered()    //打开文件
{
    QString fileName = QFileDialog::getOpenFileName(this, "打开文件");
    QFile file(fileName);
    currentFile = fileName;
    setWindowTitle(fileName);

    if (!file.open(QIODevice::ReadOnly | QFile::Text))
    {
        QMessageBox::warning(this,"警告","无法打开文件!");
        return;
    }

    QTextStream in(&file);
    QString text = in.readAll();
    ui->Text->setText(text);
    file.close();
}

4、保存

void MainWindow::on_actionsave_triggered()  //保存文件
{
    QString fileName;
    if (currentFile.isEmpty())
        fileName = QFileDialog::getSaveFileName(this, "保存文件", "../", "文本文档(*.txt);;所有文件(*.*)");
    else
        fileName=currentFile;
    QFile file(fileName);
    file.open(QIODevice::WriteOnly);
    setWindowTitle(fileName);
    QTextStream outs(&file);
    outs<<ui->Text->toPlainText();
    outs.flush();
    file.close();
    ui->Text->document()->setModified(false);
}

5、另存为

void MainWindow::on_actionosave_triggered()   //另存为
{
    QString fileName = QFileDialog::getSaveFileName(this, "另存为","../","文本文档(*.txt);;所有文件(*.*)");
    QFile file(fileName);
    file.open(QIODevice::WriteOnly);
    currentFile = fileName;
    setWindowTitle(fileName);
    QTextStream out(&file);
    out << ui->Text->toPlainText();
    out.flush();
    file.close();
}

6、页面设置、打印功能

void MainWindow::on_actionpageset_triggered()  //页面设置
{
    QPageSetupDialog *PageSetup = new QPageSetupDialog();
    PageSetup->show();
}

void MainWindow::on_action_triggered()    //打印
{
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
     QPrinter printDev;
 #if QT_CONFIG(printdialog)
     QPrintDialog dialog(&printDev, this);
     if (dialog.exec() == QDialog::Rejected)
         return;
 #endif // QT_CONFIG(printdialog)
     ui->Text->print(&printDev);
#endif // QT_CONFIG(printer)
}

7、退出、撤销、剪切、复制、粘贴、删除、全选功能

void MainWindow::on_actionexit_triggered()   //退出
{
    MainWindow::close();
}


void MainWindow::on_actioncancle_triggered()  //撤销
{
    ui->Text->undo();
}

void MainWindow::on_actioncut_triggered()  //剪切
{
    ui->Text->cut();
}

void MainWindow::on_actioncopy_triggered()  //复制
{
    ui->Text->copy();
}

void MainWindow::on_actionpaste_triggered()  //粘贴
{
    ui->Text->paste();
}

void MainWindow::on_actiondelete_triggered()  //删除
{
    ui->Text->textCursor().removeSelectedText();  //对鼠标选中区域删除
}

void MainWindow::on_actionall_triggered()   //全选
{
    ui->Text->selectAll();
}

8、查找

void MainWindow::on_actionfind_triggered()   //查找
{
    findDlg=new QDialog(this);
    findDlg->setWindowTitle(tr("查找"));
    findedit=new QLineEdit(findDlg);
    QPushButton *btn_d=new QPushButton(tr("查找下一个"), findDlg);
    QPushButton *btn_u=new QPushButton(tr("查找上一个"), findDlg);
    QVBoxLayout *layout=new QVBoxLayout(findDlg);
    layout->addWidget(findedit);
    layout->addWidget(btn_d);
    layout->addWidget(btn_u);
    connect(btn_d, SIGNAL(clicked()), this, SLOT(showFindTextu()));
    connect(btn_u, SIGNAL(clicked()), this, SLOT(showFindText()));
    findDlg->show();
}

void MainWindow::showFindTextu()    //向后查找
{
    QString str = findedit->text();
    if(ui->Text->find(str))
    {
        QPalette palette = ui->Text->palette();
        palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
        ui->Text->setPalette(palette);
    }
    else if(ui->Text->find(str,QTextDocument::FindBackward))
    {
        ui->Text->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
    }
    else
    {
        QMessageBox::information(this,tr("注意"),tr("没有找到内容"),QMessageBox::Ok);
        findDlg->close();
    }
}

void MainWindow::showFindText()   //向前查找
{
    QString str = findedit->text();
    if(ui->Text->find(str,QTextDocument::FindBackward))
    {
        QPalette palette = ui->Text->palette();
        palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
        ui->Text->setPalette(palette);
    }
    else if(ui->Text->find(str))
    {
        ui->Text->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
    }
    else
    {
        QMessageBox::information(this,tr("注意"),tr("没有找到内容"),QMessageBox::Ok);
        findDlg->close();
    }
}

void MainWindow::on_actionfindd_triggered()   //查找下一个
{
    QString str = findedit->text();
    if(ui->Text->find(str))
    {
        QPalette palette = ui->Text->palette();
        palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
        ui->Text->setPalette(palette);
    }
    else if(ui->Text->find(str,QTextDocument::FindBackward))
    {
        ui->Text->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
    }
    else
    {
        QMessageBox::information(this,tr("注意"),tr("没有找到内容"),QMessageBox::Ok);
        findDlg->close();
    }
}

void MainWindow::on_actionfindu_triggered()    //查找上一个
{
    QString str = findedit->text();
    if(ui->Text->find(str,QTextDocument::FindBackward))
    {
        QPalette palette = ui->Text->palette();
        palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
        ui->Text->setPalette(palette);
    }
    else if(ui->Text->find(str))
    {
        ui->Text->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
    }
    else
    {
        QMessageBox::information(this,tr("注意"),tr("没有找到内容"),QMessageBox::Ok);
        findDlg->close();
    }
}

9、替换

void MainWindow::on_actionexchange_triggered()   //替换
{
    exchangeDlg=new QDialog(this);
    exchangeDlg->setWindowTitle(tr("替换"));
    QLabel *find_label = new QLabel(tr("替换内容为:"));
    QLabel *replace_label = new QLabel(tr("替换为:"));

    QGridLayout *gridly=new QGridLayout(exchangeDlg);

    QPushButton *btn_ex=new QPushButton(tr("替换"), exchangeDlg);
    text_o=new QLineEdit(exchangeDlg);
    text_n=new QLineEdit(exchangeDlg);
  
    gridly->addWidget(find_label,0,0);
    gridly->addWidget(text_o,0,1);
    gridly->addWidget(replace_label,1,0);
    gridly->addWidget(text_n,1,1);
    gridly->addWidget(btn_ex);

    exchangeDlg->show();

    connect(btn_ex, &QPushButton::clicked,[=](){
        if(ui->Text->find(text_o->text()))
        {
            ui->Text->textCursor().insertText(text_n->text());
        }
        else if(ui->Text->find(text_o->text(),QTextDocument::FindBackward))
        {
            ui->Text->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
        }
        else
        {
            QMessageBox::information(this, "结果", "没有内容,不能替换“"+text_o->text()+"”", QMessageBox::Yes);
            exchangeDlg->close();
        }
    });
}

10、字体设置、放大、缩小、恢复默认值

void MainWindow::on_actionsize_triggered()   //字体
{
    bool ok;
    QFont font=QFontDialog::getFont(&ok,this);
    if(ok)
        ui->Text->setFont(font);
}

void MainWindow::on_actionbig_triggered()    //放大
{
    QFont font=ui->Text->font();
    size+=1;
    font.setPointSize(size);
    ui->Text->setFont(font);
}

void MainWindow::on_actionsmall_triggered()   //缩小
{
    QFont font=ui->Text->font();
    size-=1;
    font.setPointSize(size);
    ui->Text->setFont(font);
}

void MainWindow::on_actionreplace_triggered()   //恢复默认缩放
{
    QFont font=ui->Text->font();
    size=10.5;
    font.setPointSize(size);
    ui->Text->setFont(font);
}

11、状态栏

void MainWindow::on_actionstate_triggered()  //状态栏
{
    if(statenum==0&&s==0)
    {
        state = new QLabel;
        QLabel *statelabel = new QLabel(this);
        state->setMinimumSize(150,20);
        state->setFrameShape(QFrame::WinPanel);
        state->setFrameShadow(QFrame::Sunken);
        ui->statusbar->addWidget(state);
        state->setText(tr("状态栏"));
        statelabel->setFrameStyle(QFrame::Box|QFrame::Sunken);
        statelabel->setText(tr("shideshideshideshide"));
        statelabel->setTextFormat(Qt::RichText);
        ui->statusbar->addPermanentWidget(statelabel);
        ui->statusbar->show();
  
        statenum=1;
        s=1;
    }
    else if(statenum==1)
    {
        ui->statusbar->close();
        statenum=0;
    }
    else
    {
        ui->statusbar->show();
        statenum=1;
    }
}

12、帮助和关于使用QMessageBox中的对话框进行实现。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值