【自制软件】PDF学习宝-开发日记8--创建图书

255 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情


📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!


模态对话框

前言

前面几节主要进行了PDF阅读功能的开发,当时在stackview的页面1书库区域创建了一个大大的按钮代替已经创建好的电子书。本节将回过头来对创建图书功能进行开发。

这里需要新建一个CreateBook的对话框QDialog类,在CreateBook的对话框中的功能:

  • 选择本地PDF文档。打开PDF文档,获取PDF的存储位置并保存。这样做的好处有两点,一是便于下次打开时直接打开,无需再次查找PDF文档的位置也无需再选择PDF文档打开。二是将选定的PDF文档与对应的题库绑定,避免“文不对题”的情况出现。
  • 输入书名。

模态与非模态

QDialog类是所有对话框窗口类的基类。对话框窗口是一个经常用来完成短小任务或者和用户进行简单交互的顶层窗口。按照运行对话框时是否可以和该程序的其他窗口进行交互,对话框常被分为两类:模态的(modal)和非模态的(modeless)。

模态对话框非常霸道,在关闭它之前不能去操作其他的窗口,比如新建项目时弹出的对话框。非模态对话框则不是这样,它可以与其他窗口进行交互,对其他窗口没有影响,比如Word中的查找对话框。

创建CreateBook的对话框

选择新建文件:

image.png 输入类名并选择QDialog类:

image.png

创建完成以后,文件结构如下图:

image.png

改造createbook.h头文件:

#ifndef CREATEBOOK_H
#define CREATEBOOK_H

#include <QDialog>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFrame>

class CreateBook : public QDialog
{
    Q_OBJECT
public:
    CreateBook();

private slots:
    void on_btn_createBook_clicked();       //打开PDF电子书按钮响应
    void on_btn_apply_clicked();            //确认按钮响应
    void on_btn_cancel_clicked();           //取消按钮响应

private:
    QPushButton *btn_createBook;            //打开PDF电子书
    QPushButton *btn_apply;                 //确认
    QPushButton *btn_cancel;                //取消

    QLabel *lab_book_name;                  //书名
    QLineEdit *book_name;                   //输入书名
};

#endif // CREATEBOOK_H

改造createbook.cpp源文件:


#include "createbook.h"

CreateBook::CreateBook()
{
    //设置窗口为子窗口,这样不会在任务栏再弹出窗口图标
    setWindowFlag(Qt::SubWindow);

    QHBoxLayout *lay1 = new QHBoxLayout;
    //确认
    btn_apply = new QPushButton;
    btn_apply->setFixedSize(100,40);
    btn_apply->setText("确认");
    //取消
    btn_cancel = new QPushButton;
    btn_cancel->setFixedSize(100,40);
    btn_cancel->setText("取消");
    //添加布局
    lay1->addStretch();
    lay1->addWidget(btn_apply);
    lay1->addWidget(btn_cancel);
    lay1->addStretch();

    QHBoxLayout *lay2 = new QHBoxLayout;
    //输入标签
    lab_book_name = new QLabel;
    lab_book_name->setText("输入书名:");
    //输入框
    book_name = new QLineEdit;
    book_name->setFixedWidth(40);
    //添加布局
    lay2->addWidget(lab_book_name);
    lay2->addWidget(book_name);

    QVBoxLayout *lay3 = new QVBoxLayout;
    //打开PDF
    btn_createBook = new QPushButton;
    btn_createBook->setFixedWidth(80);
    //添加布局
    lay3->addWidget(btn_createBook);
    lay3->addLayout(lay2);
    lay3->addLayout(lay1);


    //槽函数
    //打开PDF按钮
    connect(btn_createBook,SIGNAL(clicked()),this,SLOT(on_btn_createBook_clicked()));
    //点击确定将保存PDF的位置信息和书名
    connect(btn_apply,SIGNAL(clicked()),this,SLOT(on_btn_apply_clicked()));
    //点击取消按钮直接退出对话框,退出模态
    connect(btn_cancel,SIGNAL(clicked()),this,SLOT(on_btn_cancel_clicked()));
}