C++学习之QT实现取证小软件首页

发布于:2025-03-20 ⋅ 阅读:(21) ⋅ 点赞:(0)

实现效果

#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 &ltime,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;
}