实现效果
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolButton>
#include <QLabel>
#include <QMessageBox>
#include <QDebug>
#include <QHBoxLayout>
#include <QTableView>
#include <QStandardItemModel>
#include <QApplication>
#include <QHeaderView>
#include <QItemSelection>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//this->setStyleSheet("background-color: #00429D;");
//设置取证大师首页属性
this->setWindowTitle("XX大师 试用版");
this->setFixedSize(1920,980);
this->setWindowIcon(QPixmap(":/Luffy.png"));
//this->FramelessWindowHint
//this->setStyleSheet("QTitleBar { background-color: #00429D; }");
//this->setStyleSheet("QMainWindow { background-color: #00429D; }"); // 修改为你的颜色
//this->setStyleSheet("QFrame { background-color: #00429D; }");
//菜单栏 只能有1个
QMenuBar * bar = menuBar();
bar->setStyleSheet("QMenuBar { background-color: #1052AE; color: white;}"); //
//将菜单栏设置到窗口中
this->setMenuBar(bar);
//文件菜单添加菜单
QMenu * fileMenu = bar->addMenu("文件(F)");
QMenu * setMenu = bar->addMenu("设置(S)");
QMenu * viewMenu = bar->addMenu("视图(V)");
QMenu * forensicMenu = bar->addMenu("取证(P)");
QMenu * toolMenu = bar->addMenu("工具(T)");
QMenu * helpMenu = bar->addMenu("帮助(H)");
//添加菜单项
QAction * newAction = fileMenu->addAction("XX(N) Ctrl+N");
QAction * safeAction = fileMenu->addAction("XX(S) Ctrl+S");
safeAction->setDisabled(true);
QAction * sxAction = fileMenu->addAction("XX(A)");
sxAction->setDisabled(true);
QAction * openAction = fileMenu->addAction("XX(O) Ctrl+O");
QAction * closeAction = fileMenu->addAction("XX(I)");
closeAction->setDisabled(true);
//添加分割线
fileMenu->addSeparator();
QAction * addAction = fileMenu->addAction("XX(D)");
QAction * makeAction = fileMenu->addAction("XX(M) Ctrl+M");
addAction->setDisabled(true);
makeAction->setDisabled(true);
//添加分割线
fileMenu->addSeparator();
QAction * seeAction = fileMenu->addAction("XX");
QAction * exportAction = fileMenu->addAction("XX");
exportAction->setDisabled(true);
//添加分割线
fileMenu->addSeparator();
QAction * exitAction = fileMenu->addAction("XX(X)");
//设置菜单添加菜单项
QAction * straAction = setMenu->addAction("XX(P)");
//添加分割线
setMenu->addSeparator();
QAction * typeAction = setMenu->addAction("XX(S)");
QAction * ssAction = setMenu->addAction("XX(K)");
QAction * txtAction = setMenu->addAction("XX(W)");
QAction * hsAction = setMenu->addAction("XX(Z)");
QAction * imAction = setMenu->addAction("XX(R)");
imAction->setDisabled(true);
//添加分割线
setMenu->addSeparator();
QAction * resAction = setMenu->addAction("XX(X)");
QAction * allAction = setMenu->addAction("XX(Y)");
//添加分割线
setMenu->addSeparator();
QAction * setAction = setMenu->addAction("XX(O)");
//视图菜单添加菜单项
QAction * toolsAction = viewMenu->addAction("XX(I)");
QAction * statusAction = viewMenu->addAction("XX(S)");
//添加分割线
viewMenu->addSeparator();
QAction * alAction = viewMenu->addAction("XX(M)");
QAction * evidAction = viewMenu->addAction("XX(P) CTRL+P");
QAction * anligailan1Action = viewMenu->addAction("XX(C)");
QAction * sdhuifuAction = viewMenu->addAction("XX(Y)");
QAction * gzAction = viewMenu->addAction("XX");
//添加分割线
viewMenu->addSeparator();
QAction * fresAction = viewMenu->addAction("XX(R) CTRL+R");
QAction * sssAction = viewMenu->addAction("XX(X)");
QAction * yuanshisAction = viewMenu->addAction("XX(H)");
QAction * analyAction = viewMenu->addAction("XX(Y)");
QAction * registAction = viewMenu->addAction("XX(E)");
QAction * zlstAction = viewMenu->addAction("XX(B)");
QAction * reportAction = viewMenu->addAction("XX(F)");
QAction * timeAction = viewMenu->addAction("XX(D)");
//添加分割线
viewMenu->addSeparator();
QAction * logAction = viewMenu->addAction("XX(L)");
//取证菜单添加菜单项
QAction * autoAction = forensicMenu->addAction("XX(T)");
autoAction->setDisabled(true);
//添加分割线
forensicMenu->addSeparator();
QAction * netHisAction = forensicMenu->addAction("XX(S)");
QAction * jsAction = forensicMenu->addAction("XX(Q)");
QAction * mailAction = forensicMenu->addAction("XX(E)");
QAction * syAction = forensicMenu->addAction("XX引(I)");
netHisAction->setDisabled(true);
jsAction->setDisabled(true);
mailAction->setDisabled(true);
syAction->setDisabled(true);
//工具菜单添加菜单项
QAction * filtAction = toolMenu->addAction("XXX(U)");
filtAction->setDisabled(true);
//添加分割线
toolMenu->addSeparator();
QAction * recoAction = toolMenu->addAction("XX(R)");
recoAction->setDisabled(true);
QAction * sjdAction = toolMenu->addAction("XX(P)");
//添加分割线
toolMenu->addSeparator();
QAction * hachCAction = toolMenu->addAction("XX(C)");
hachCAction->setDisabled(true);
QAction * hsCAction = toolMenu->addAction("XX(S)");
hsCAction->setDisabled(true);
//添加分割线
toolMenu->addSeparator();
QAction * paDicAction = toolMenu->addAction("XX(D)");
imAction->setDisabled(true);
//添加分割线
toolMenu->addSeparator();
QAction * glanalyAction = toolMenu->addAction("XX(B)");
glanalyAction->setDisabled(true);
QAction * anaHitAction = toolMenu->addAction("XX(L)");
anaHitAction->setDisabled(true);
//添加分割线
toolMenu->addSeparator();
QAction * uPassAction = toolMenu->addAction("XX(J)");
uPassAction->setDisabled(true);
QAction * screenCAction = toolMenu->addAction("XX(A)");
screenCAction->setDisabled(true);
//添加分割线
setMenu->addSeparator();
QAction * ltoolAction = toolMenu->addAction("XX(T)");
QAction * lAppliAction = toolMenu->addAction("XX(X)");
//帮助菜单添加菜单项
QAction * helpAction = helpMenu->addAction("XX(H)");
QAction * serviceAction = helpMenu->addAction("XX(O)");
//添加分割线
helpMenu->addSeparator();
QAction * netAction = helpMenu->addAction("XX(M)");
QAction * feedAction = helpMenu->addAction("XX(F)");
imAction->setDisabled(true);
//添加分割线
helpMenu->addSeparator();
QAction * checkUAction = helpMenu->addAction("XX(N)");
QAction * userDAction = helpMenu->addAction("XX(L)");
QAction * aboutAction = helpMenu->addAction("XX(A)");
//添加子菜单
//QMenu * subMenu = new QMenu;
//subMenu->addAction("子菜单1");
//subMenu->addAction("子菜单2");
// newAction->setMenu(subMenu);
//工具栏 可以有多个
QToolBar * toolBar = new QToolBar(this);
toolBar->setStyleSheet("QToolBar { background-color: #00429D; color: white;border: none;}"); //
//将工具栏添加到窗口中
this->addToolBar( Qt::TopToolBarArea, toolBar);
//设置停靠区域
toolBar->setAllowedAreas(Qt::TopToolBarArea );
//设置浮动
toolBar->setFloatable(false);
//设置移动
toolBar->setMovable(false);
//toolBar->setFixedHeight(200);
//创建一个QToolButton并设置图标
QToolButton *toolButton = new QToolButton();
toolButton->setIcon(QIcon(":/bird1.png"));
toolButton->setIconSize(QSize(32, 32)); // 设置图标大小
toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
toolButton->setText("案例管理");
toolButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(toolButton);
//添加分割线
//toolBar->addSeparator();
QToolButton *equipButton = new QToolButton();
equipButton->setIcon(QIcon(":/bird2.png"));
equipButton->setIconSize(QSize(32, 32)); // 设置图标大小
equipButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
equipButton->setText("添加设备");
equipButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(equipButton);
QToolButton *autoButton = new QToolButton();
autoButton->setIcon(QIcon(":/bird3.png"));
autoButton->setIconSize(QSize(32, 32)); // 设置图标大小
autoButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
autoButton->setText("自动取证");
autoButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(autoButton);
QToolButton *recoverButton = new QToolButton();
recoverButton->setIcon(QIcon(":/bird4.png"));
recoverButton->setIconSize(QSize(32, 32)); // 设置图标大小
recoverButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
recoverButton->setText("数据恢复");
recoverButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(recoverButton);
QToolButton *searButton = new QToolButton();
searButton->setIcon(QIcon(":/bird5.png"));
searButton->setIconSize(QSize(32, 32)); // 设置图标大小
searButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
searButton->setText("数据分析");
searButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(searButton);
//分析按钮
connect(searButton,&QToolButton::clicked,[=](){
qDebug() << "分析";
QMessageBox::information(this,"分析按钮","分析按钮,展现自动取证界面");
});
QToolButton *searchButton = new QToolButton();
searchButton->setIcon(QIcon(":/bird6.png"));
searchButton->setIconSize(QSize(32, 32)); // 设置图标大小
searchButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
searchButton->setText("搜索");
searchButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(searchButton);
QToolButton *filtButton = new QToolButton();
filtButton->setIcon(QIcon(":/bird3.png"));
filtButton->setIconSize(QSize(32, 32)); // 设置图标大小
filtButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
filtButton->setText("文件过滤");
filtButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(filtButton);
QToolButton *timeButton = new QToolButton();
timeButton->setIcon(QIcon(":/bird4.png"));
timeButton->setIconSize(QSize(32, 32)); // 设置图标大小
timeButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
timeButton->setText("时间线");
timeButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(timeButton);
QToolButton *forReButton = new QToolButton();
forReButton->setIcon(QIcon(":/bird5.png"));
forReButton->setIconSize(QSize(32, 32)); // 设置图标大小
forReButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
forReButton->setText("取证报告");
forReButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(forReButton);
QToolButton *repoButton = new QToolButton();
repoButton->setIcon(QIcon(":/bird6.png"));
repoButton->setIconSize(QSize(32, 32)); // 设置图标大小
repoButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
repoButton->setText("摘录报告");
repoButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(autoButton);
QToolButton *toolsButton = new QToolButton();
toolsButton->setIcon(QIcon(":/bird7.png"));
toolsButton->setIconSize(QSize(32, 32)); // 设置图标大小
toolsButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
toolsButton->setText("工具集");
toolsButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(toolsButton);
QToolButton *littleButton = new QToolButton();
littleButton->setIcon(QIcon(":/bird8.png"));
littleButton->setIconSize(QSize(32, 32)); // 设置图标大小
littleButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
littleButton->setText("小程序");
littleButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(littleButton);
QToolButton *serviceButton = new QToolButton();
serviceButton->setIcon(QIcon(":/Coin0001.png"));
serviceButton->setIconSize(QSize(32, 32)); // 设置图标大小
serviceButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
serviceButton->setText("客服");
serviceButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(serviceButton);
QToolButton *cloudButton = new QToolButton();
cloudButton->setIcon(QIcon(":/Coin0002.png"));
cloudButton->setIconSize(QSize(32, 32)); // 设置图标大小
cloudButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
cloudButton->setText("取证云平台");
cloudButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(cloudButton);
QToolButton *testButton = new QToolButton();
testButton->setIcon(QIcon(":/Coin0003.png"));
testButton->setIconSize(QSize(32, 32)); // 设置图标大小
testButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置样式为仅图标
testButton->setText("试用平台");
testButton->setStyleSheet("QToolButton { color: white;}"); //
toolBar->addWidget(testButton);
ui->tabWidget->setFixedSize(1920,880);
ui->tab_2->setHidden(true);
//ui->tabWidget->setStyleSheet("background-color: #C5C5C5;");
//this->setAlignment(ui->textEdit,Qt::AlignRight); // 对齐方式设置为右对齐
//QPixmap pixmap(":/bird1.png"); // 确保图片已经添加到资源中
// QTextCursor cursor = ui->textEdit->textCursor();
//cursor.insertImage(pixmap); // 插入图片
QImage image(":/ic_action_search.webp"); // 确保图片已经添加到资源中
QTextImageFormat format;
format.setName(":/ic_action_search.webp"); // 图片资源路径
//format.setAlignment(Qt::AlignRight); // 右对齐
format.setHeight(20);
format.setWidth(20);
QTextCursor cursor = ui->textEdit->textCursor();
cursor.insertImage(format); // 插入图片
initStudent();
initTableView();
//状态栏 只能有1个
QStatusBar * sBar = statusBar();
//设置状态栏到窗口中
this->setStatusBar(sBar);
QLabel * lr=new QLabel("当前项目数:0",this);
sBar->addPermanentWidget(lr);
}
// 初始化数据
void MainWindow::initStudent()
{
// QStringList mHeader;
mHeader << "序号" << "案例名称" << "设备数" << "创建日期" << "最后打开时间"<< "操作";
mHeader2 << "序号" << "名称" << "类型" << "大小" << "备注"<< "编号";
// QList<Student *> mStudents;
mStudents << new Student("1", "Case01-20250305-135550",1, "2025-03-05 13:56:01", "2025-03-05 13:56:01", "打开")
<< new Student("2", "Case01-20250301-135550",1, "2025-03-03 13:56:01", "2025-03-05 13:56:01", "打开")
<< new Student("3", "Case01-20250205-135550",2, "2025-03-03 13:56:01", "2025-03-05 13:56:01", "打开")
<< new Student("4", "Case01-20250205-135550",3, "2025-03-03 13:56:01", "2025-03-05 13:56:01", "打开")
<< new Student("5", "Case01-20250127-135550",1, "2025-02-05 13:56:01", "2025-02-05 13:56:01", "打开")
<< new Student("6", "Case01-20250120-135550",1, "2025-02-05 13:56:01", "2025-02-05 13:56:01", "打开")
<< new Student("7","Case01-20241105-135550", 3, "2025-11-27 13:56:01", "2025-11-27 13:56:01", "打开")
<< new Student("8", "Case01-20241105-135550",4, "2024-10-05 13:56:01", "2024-10-05 13:56:01", "打开")
<< new Student("9", "Case01-20241005-135550",1, "2024-09-05 13:56:01", "2024-09-05 13:56:01", "打开")
<< new Student("10", "Case01-20241005-135550",1, "2024-08-05 13:56:01", "2024-08-05 13:56:01", "打开")
<< new Student("11", "Case01-20240905-135550",1, "2024-07-05 13:56:01", "2024-07-05 13:56:01", "打开")
<< new Student("12", "Case01-20240805-135550",2, "2024-05-05 13:56:01", "2024-05-05 13:56:01", "打开")
<< new Student("13", "Case01-20240705-135550",3, "2024-03-05 13:56:01", "2024-03-05 13:56:01", "打开");
}
Student::Student(const QString &id, const QString &name, int nu, const QString &ctime, const QString <ime,const QString &op)
{
mId = id;
mName = name;
mNu = nu;
cMtime = ctime;
lMtime = ltime;
oMp=op;
}
Student::~Student()
{
}
void MainWindow::initTableView()
{
// QStandardItemModel *mTableViewModel;
// 设置模型格式
mTableViewModel = new QStandardItemModel(this);
mTableViewModel->setRowCount(mStudents.size());
mTableViewModel->setColumnCount(5);
mTableViewModel->setHorizontalHeaderLabels(mHeader);
// 填充数据
for (int i = 0; i < mStudents.size(); ++i) {
Student *s = mStudents.at(i);
QStandardItem *item0 = new QStandardItem;
item0->setData(s->mId, Qt::DisplayRole);
QStandardItem *item1 = new QStandardItem;
item1->setData(s->mName, Qt::DisplayRole);
QStandardItem *item2 = new QStandardItem;
item2->setData(s->mNu, Qt::DisplayRole);
QStandardItem *item3 = new QStandardItem;
item3->setData(s->cMtime, Qt::DisplayRole);
QStandardItem *item4 = new QStandardItem;
item4->setData(s->lMtime, Qt::DisplayRole);
QStandardItem *item5 = new QStandardItem;
item5->setData(s->oMp, Qt::DisplayRole);
mTableViewModel->setItem(i, 0, item0);
mTableViewModel->setItem(i, 1, item1);
mTableViewModel->setItem(i, 2, item2);
mTableViewModel->setItem(i, 3, item3);
mTableViewModel->setItem(i, 4, item4);
mTableViewModel->setItem(i, 5, item5);
}
// view-model
ui->tableView_1->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableView_1->setStyleSheet("QTableView { show-decoration-selector: on; }"
"QTableView::item { border: none; }"
"QTableView::horizontalHeader { border-bottom: 1px solid black; }"
"QTableView::verticalHeader { border-right: 1px solid black; }");
ui->tableView_1->setModel(mTableViewModel);
ui->tableView_1->setShowGrid(false);
mTableViewModel2 = new QStandardItemModel(this);
mTableViewModel2->setRowCount(1);
mTableViewModel2->setColumnCount(5);
mTableViewModel2->setHorizontalHeaderLabels(mHeader2);
QStandardItem *item20 = new QStandardItem;
item20->setData(1, Qt::DisplayRole);
QStandardItem *item21 = new QStandardItem;
item21->setData("欧阳锋计算机镜像", Qt::DisplayRole);
QStandardItem *item22 = new QStandardItem;
item22->setData("镜像文件", Qt::DisplayRole);
QStandardItem *item23 = new QStandardItem;
item23->setData("60.00G", Qt::DisplayRole);
QStandardItem *item24 = new QStandardItem;
item24->setData("", Qt::DisplayRole);
QStandardItem *item25 = new QStandardItem;
item25->setData("", Qt::DisplayRole);
mTableViewModel2->setItem(0, 0, item20);
mTableViewModel2->setItem(0, 1, item21);
mTableViewModel2->setItem(0, 2, item22);
mTableViewModel2->setItem(0, 3, item23);
mTableViewModel2->setItem(0, 4, item24);
mTableViewModel2->setItem(0, 5, item25);
ui->tableView_2->setModel(mTableViewModel2);
ui->tableView_2->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableView_2->setShowGrid(false);
}
MainWindow::~MainWindow()
{
delete ui;
}