第15章 Qt项目实战之视频加密器
好文章,来自【福优学苑@音视频+流媒体】
第15章 Qt项目实战之视频加密器
福优学苑@视频加密专家
视频加密 -- 操作说明
HiTT -- 福优学苑音视频加密专家,经典的C/S架构,分为服务端和客户端。
服务端负责对视频文件进行加密,客户端主要负责播放视频(边解密边播放)。
第1步:选择音视频文件
第2步:加密设置(密码设置、加密模式、一机一码、共享模式、绑定硬盘主板显卡)
第3步:播放设置(次数限制、预览限制、时间限制、播放比例、视频水印设置)
第4步:防盗设置(防止录屏、禁止截屏、禁止虚拟机播放、防盗问答)
第5步:输出设置(输出文件夹)
播放器:一机一码,边解密边播放,保护视频版权
界面设计与美化
视频加密策略
基于文件头加密
基于帧的加密
基于字节的加密
QTabWidget
选择文件
加密设置
播放设置
防盗设置
执行加密
代码分析
void Widget::initPage()
{
this->setStyleSheet("background-color:#F0F0F0;");
///1. qss,类似于css
ui->lblLogoText->setStyleSheet("color:#009100;font-style:italic;font-weight:bold;font-size:30px;");
///2. c++代码: Palette,Font(调色板、字体、画刷)
///
/*QPalette pa;
pa.setColor(QPalette::WindowText, QColor("#009100"));
ui->lblLogoText->setPalette(pa);
QFont ft;
ft.setPointSize(20);
ft.setBold(true);
ui->lblLogoText->setContentsMargins(3,0,0,3);
ui->lblLogoText->setFont(ft);
*/
/// logo图片
QImage image(":/ress/pics/fu_logo.png");
ui->lblLogoImage->setPixmap(QPixmap::fromImage( image) );
/// 按钮背景色
///
ui->frameTop->setStyleSheet("background-color:#C4E1FF;");
///ui->btnNextOK->setStyleSheet("background-color:#C4E1FF;font-weight:bold;font-size:30px;color:#009100;border:2px groove gray;border-radius:10px;padding:2px 4px;");
ui->btnNextOK->setStyleSheet("QPushButton{background-color:rgba(125,178,123);\
color: white; font-size:30px; font-weight:bold; border-radius: 10px; border: 2px groove gray; border-style: outset;}"
"QPushButton:hover{background-color:white;font-size:30px;font-weight:bold; color: black;}"
"QPushButton:pressed{background-color:rgb(85, 170, 155);font-size:30px;font-weight:bold; border-style: inset; }"
);
/// 进度条
ui->progressBar_Encrypt->setValue(0);
// 初始化标准数据模型类对象
m_simodel = new QStandardItemModel();
// 初始化选择状态类对象
pstSelectModel = new QItemSelectionModel(m_simodel);
ui->tabContents->setStyleSheet(
"QTabWidget{"
"background-color:transparent;"
"}"
"QTabWidget::pane{"
" border:2px;"
"}"
"QTabWidget::tab-bar{"
" alignment:left;"
"}"
"QTabBar::tab{"
" background:rgb(14, 106, 175);"
" color:white;"
" border:1px solid #ffffff;"
" font-size:20px;"
" font-weight:bold;"
" min-width:35ex;"
" min-height:10ex;"
"}"
"QTabBar::tab:hover{"
" background:rgb(255, 255, 255, 100);"
"color:black;"
"}"
"QTabBar::tab:selected{"
" border-color: black;"
" background:red;"
" color:white;"
"}"
);
m_simodel->setColumnCount(3);
m_simodel->setHeaderData(0,Qt::Horizontal,"文件名");
m_simodel->setHeaderData(1,Qt::Horizontal,"文件大小");
m_simodel->setHeaderData(2,Qt::Horizontal,"文件路径");
// 为tableView设置数据模型和选择模型
ui->tableView->setModel(m_simodel);
ui->tableView->setSelectionModel(pstSelectModel);
//设置列宽不可变
//ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed);
//ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed);
ui->tableView->setColumnWidth(0,300);
ui->tableView->setColumnWidth(1,160);
ui->tableView->setColumnWidth(2,590);
ui->tableView->horizontalHeader()->setStyleSheet("color:#DA992A;font-size:20px;font-weight:bold;");
ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);
}
void Widget::on_tabContents_tabBarClicked(int index)
{
if(index == 4){
ui->btnNextOK->setText("执行加密");
}
else{
ui->btnNextOK->setText("下一步");
}
}
好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***