持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!
页面跳转
前言
前面书库页面和题库页面都是QStackView的子页面,QStackedWidget类提供了一组页面,其中每次只有一个页面可见,这个组件有点像轮播图。添加按钮可以控制其页面跳转,本节使用的方法就是先放置一个测试按钮来控制QStackView子页面由页面1跳转至页面2。
新建测试按钮
这里我在页面1新建一个按钮来模拟在书库中选择并打开图书的操作。点击按钮之后,由页面1跳转至页面2,并在页面2中显示PDF导航栏和文档。
在widget.h头文件中添加声明和槽函数声明:
private slots:
void on_open_pdf_clicked(); //设置打开pdf响应
private:
QPushButton *open_pdf; //打开pdf按钮
在widget.cpp源文件中定义槽函数:
void Widget::on_open_pdf_clicked()
{
QUrl toOpen = QFileDialog::getOpenFileUrl(this, tr("Choose a PDF"), QUrl(), "Portable Documents (*.pdf)");
if (toOpen.isValid())
open(toOpen);
}
在构造函数中添加信号与槽的链接:
connect(open_pdf,SIGNAL(clicked()),this,SLOT(on_open_pdf_clicked()));
在构造函数中实例化按钮并添加到布局中:
/*书库区域暂时没有完成设计,先添加一个pdf打开按钮*/
open_pdf = new QPushButton;
open_pdf->setFixedSize(135,240);
open_pdf->setText("打开PDF");
scra->setWidget(open_pdf);
至此,按钮的添加已经完成,接下来需要实现的是pdf文档的加载与由页面1到页面2的跳转,pdf文档加载完成后才会跳转,否则弹出错误提示框。
PDF文档加载
使用Qt PDF模块之前,需要在.pro文件中添加如下语句:
QT += pdf
并且在widget.h头文件中添加:
#include <QtPdf>
#include <QPdfView>
class QPdfDocument;
class QPdfView;
public slots:
void open(const QUrl &docLocation);
private:
QPdfDocument *m_document; //pdf文件
改造widget.cpp源文件的构造函数,将构造函数由:
Widget::Widget(QWidget *parent)
: QWidget(parent)
改为:
Widget::Widget(QWidget *parent)
: QWidget(parent)
, m_document(new QPdfDocument(this))
修改完构造函数后,Qt PDF模块就可以进行使用了,否则会造成软件崩溃。
实现open函数:
void Widget::open(const QUrl &docLocation)
{
if (docLocation.isLocalFile()) {
m_document->load(docLocation.toLocalFile());
const auto documentTitle = m_document->metaData(QPdfDocument::Title).toString();
if(!documentTitle.isEmpty())
lab_title->setText("Learning assistant "+documentTitle);//将pdf文档名添加到标题栏文字
stackview->setCurrentWidget(page2);//页面跳转
} else {
QMessageBox::critical(this, tr("Failed to open"), tr("%1 is not a valid local file").arg(docLocation.toString()));
}
}
我将页面跳转的功能放到了pdf文档打开的函数中,这样做只是暂时的,先将PDF的功能完全开发好之后,后面规划好书库页面后肯定这里也会进行调整。边做边想,有了更好的想法会一直对软件进行优化升级。