前言
待完成
正文
目录- 主界面预览
- 菜单栏和状态栏设计
- 设计中心窗口
- QTabWidget
- QTextEdit
- QStatusBar
- 功能设计
- 新建文件
- 打开文件
- 保存文件
- 打开新窗口
- 打印文件
- 打印预览
- 定义槽函数
- 打印预览
- 另存为PDF
- 设置字体
- 撤销 返回 复制 粘贴 剪贴 全选
- 转CSDN
- 参考文献
- 菜单栏和状态栏设计
- 设计中心窗口
- QTabWidget
- QTextEdit
- QStatusBar
- 功能设计
- 新建文件
- 打开文件
- 保存文件
- 打开新窗口
- 打印文件
- 打印预览
- 定义槽函数
- 打印预览
- 另存为PDF
- 设置字体
- 撤销 返回 复制 粘贴 剪贴 全选
- 转CSDN
- 参考文献
主界面预览
微信公众号【编程学习基地】后台发送关键字NotePad获取源码
菜单栏和状态栏设计
仿照记事本的菜单栏进行设计,利用利用Designer设计UI界面万能的UI设计方案
设计中心窗口
QTabWidget
代码语言:javascript复制 QTabWidget *Tab;
实例化对象
代码语言:javascript复制 this->Tab = new QTabWidget(this);
this->setCentralWidget(Tab);
this->Tab->setMovable(true); //设置页面是否可被拖拽移动.
this->Tab->setTabsClosable(true); //设置页面是否可以关闭
QTextEdit
代码语言:javascript复制QList<QTextEdit*> EditList; /* 定义QList容器 */
实例化对象
代码语言:javascript复制QTextEdit *newEdit = new QTextEdit();
EditList.append(newEdit); //将newEdit添加进List里面,方便管理
this->Tab->addTab(newEdit, filename); //新建空白文件
QStatusBar
代码语言:javascript复制 QStatusBar *stbar;
QLabel *lb_fileinfo; //文件信息
QLabel *lb_time; //时间
QLabel *lab_tmp; //填充
QLabel *lab_tmp1; //填充
实例化对象
代码语言:javascript复制 //状态栏状态信息初始化
this->stbar = this->statusBar();
this->lb_fileinfo = new QLabel();
this->lb_time = new QLabel();
this->lab_tmp = new QLabel(" ");
this->lab_tmp1 = new QLabel(" ");
//添加状态栏信息
stbar->addWidget(lb_fileinfo);
stbar->addWidget(lab_tmp);
stbar->addWidget(lab_tmp1);
stbar->addWidget(lb_time);
功能设计
新建文件
在这里插入图片描述
代码语言:javascript复制 QTextEdit *newEdit = new QTextEdit();
this->Tab->addTab(newEdit, filename); //新建空白文件
this->Tab->setCurrentIndex(ID); //设置当前Tab下标
this->ID ; //id加一
this->lb_fileinfo->setText(filename); //设置状态栏信息
打开文件
代码语言:javascript复制 QString openName;
openName = QFileDialog::getOpenFileName(this, "打开文件", "");
if(openName.isEmpty()){
qDebug()<<"文件打开失败";
return;
}
qDebug()<<"打开文件成功";
QFile file(openName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug()<<file.errorString();
return;
}
//读取 解决打开文件中文乱码 没有完全解决utf-8没问题
while (!file.atEnd()) {
QByteArray line = file.readLine();
QString str = QString(line); //QString(line) QByteArray转化为QString
this->EditList.at(ID - 1)->append(str);
}
file.close();
保存文件
代码语言:javascript复制 QString saveFileName = QFileDialog::getSaveFileName(this, "保存",QString("%1.txt").arg(ID));
if(saveFileName.isEmpty()){
qDebug()<<"文件保存失败";
return;
}
//进行写操作
QString txt = this->EditList.at(this->Tab->currentIndex())->toPlainText();
QFile file(saveFileName);
file.open(QIODevice::WriteOnly|QIODevice::Text);
file.write(txt.toUtf8());
file.close();
打开新窗口
代码语言:javascript复制 MainWindow* newWindow = new MainWindow; //实例化自己
newWindow->show();
打印文件
在这里插入图片描述
代码语言:javascript复制 //创建打印机对象
QPrinter printer (QPrinter::HighResolution);
//打印机构造一个新的模态打印机对话框。
QPrintDialog *dlg=new QPrintDialog(&printer,this);
//如果选中文档 activeWindow为QTextEdit 声明的对象
if(this->EditList.at(this->Tab->currentIndex())->textCursor().hasSelection())
{
dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
}
dlg->setWindowTitle(tr("打印文档"));
if(dlg->exec()==QDialog::Accepted)
{
//便于将文本编辑文档打印到给定打印机的功能。这相当于直接在文档上调用print方法
this->EditList.at(this->Tab->currentIndex())->print(&printer);
}
delete dlg;
打印预览
定义槽函数
代码语言:javascript复制private slots:
void printPreview(QPrinter *);
打印预览
代码语言:javascript复制/* 打印预览 */
void MainWindow::on_action_PrintPreview_triggered()
{
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog preview(&printer, this);
connect(&preview, SIGNAL(paintRequested(QPrinter*)), this,SLOT(printPreview(QPrinter*)));
preview.exec();
}
/* 预览槽函数 */
void MainWindow::printPreview(QPrinter *printer)
{
this->EditList.at(this->Tab->currentIndex())->print(printer);
}
另存为PDF
在这里插入图片描述
代码语言:javascript复制 QString saveFileName = QFileDialog::getSaveFileName(this, "另存为PDF",QString("%1.pdf").arg(ID));
if(saveFileName.isEmpty()){
qDebug()<<"文件保存失败";
return;
}
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(saveFileName);
this->EditList.at(this->Tab->currentIndex())->document()->print(&printer);
设置字体
在这里插入图片描述
给所有QTextEdit对象统一设置字体
代码语言:javascript复制 bool ok;
QFont font = QFontDialog::getFont(&ok, QFont("Consolas", 12), this);
if (ok) {
for(int i=0;i<EditList.size();i )
{
EditList.at(i)->setFont(font);
}
qDebug()<<"成功设置颜色";
} else {
qDebug()<<"颜色设置失败";
}
撤销 返回 复制 粘贴 剪贴 全选
代码语言:javascript复制QTextEdit::undo(); //撤销
QTextEdit::redo(); //返回
QTextEdit::copy(); //复制
QTextEdit::paste(); //粘贴
QTextEdit::cut(); //剪贴
QTextEdit::selectAll(); //全选
转CSDN
代码语言:javascript复制QDesktopServices::openUrl(QUrl(QLatin1String("https://blog.csdn.net/qq_44519484")));
参考文献
[1] Qt官方示例application
[2]Qt官方示例syntaxhighlighter
源代码github地址:
https://github.com/ADeRoy/Qt_Demo.git
关键字【NotePad】