实现过程中遇到问题的笔记:
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中的对话框进行实现。