Linux u盘助手期中总结

</pre><p></p><p>经过一个月的努力,除了界面还有待改进,交互方式略显单调,项目需求的基本功能已全部实现;部分高级功能也有了初步的想法和实践。</p><p> </p><p><strong><span style="font-size:18px;">基本功能的实现:</span></strong></p><p><span style="font-size:18px;">1.悬浮窗口的实现。</span></p><p>1.1<span style="font-family:宋体;">继承</span><span style="font-family:Times New Roman;">QWidget</span><span style="font-family:宋体;">类,设置</span><span style="font-family:Times New Roman;">Qt::FramelessWindowHint</span><span style="font-family:宋体;">属性去除边框,同时利用</span><span style="font-family:Times New Roman;">QPixmap</span><span style="font-family:宋体;">加载悬浮窗口的图片。</span></p><p>1.2<span style="font-family:宋体;">重写鼠标事件,包括移动、点击、拖动、双击等,以达到可鼠标拖动、双击打开主窗口、移动提示等功能。</span></p><p><pre name="code" class="cpp">
void MinIconWidget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        m_CurrentPos = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}

void MinIconWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() && Qt::LeftButton)
    {
        move(event->globalPos() - m_CurrentPos);
        event->accept();
    }
}

void MinIconWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(10, 10, 128, 128,m_Pixmap);
}

void MinIconWidget::leaveEvent(QEvent *event)
{
    setCursor(Qt::ArrowCursor);
    //exitButton->hide();
}

void MinIconWidget::enterEvent(QEvent *event)
{
    setCursor(Qt::PointingHandCursor);
    //exitButton->show();
}

void MinIconWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
    emit DoubleClickedSignal();
}


2.主窗口的实现。

继承QWidget, 添加布局及其他item,方便交互。主界面上方为QGradLayout布局,可对u盘的信息进行检测并显示;下方为u盘热拔插管理及detail显示部分。

 

3.u盘热拔插的监听。

学习https://github.com/wang-bin/qdevicewatcher所采用的监听方式,并利用修改其部分代码。主要采用netlinksocket方式对bus上的信息进行过滤,同时获得u盘所对应的设备文件。

enum udev_monitor_netlink_group {
	UDEV_MONITOR_NONE,
	UDEV_MONITOR_KERNEL,
	UDEV_MONITOR_UDEV
};


4.u盘信息获取及显示方式。

4.1当检测到u盘时,主要采用执行shell command的方式对u盘的信息进行获取。利用QProcess的特性,start()执行命令,readAll ()读取结果,并对结果(QString)进行解析。

QString HotplugWatcher_GUI::executeCMD(const QString &command, const QStringList &list)
{
    qDebug("tid=%#x: execute command %s", (unsigned int) QThread::currentThreadId(), qPrintable(uDiskInfo->devicePath));
    QString result = "";
    process->start(command, list);
    if(!process->waitForStarted())
    {
        qDebug() << "start failed!";
        return 0;
    }
    process->closeWriteChannel();
    while(false == process->waitForFinished());
    result += process->readAll();
    return result;
}


4.2 u盘挂载路径(mount path)、u盘空间信息、的获取。利用df -h devicepath得到磁盘信息,对返回结果进行处理筛选。


4.2 u盘厂商信息的获取。检测到u盘插入后,在/proc/scsi/usb-storage/下将自动生成u盘所对应的文件,QFile打开文件(ReadOnly),读取后找到vendor所对应的内容即生产厂商。


4.3 u盘文件类型和权限的获取。利用mount并过滤出u盘所对应的信息,其中包括u盘文件系统类型、权限信息及其他一些相关信息。



4.4 uIO速度的检测。包括初步的检测和深度的检测。初步的检测利用time dd 读写/dev/zero等文件,分析计算速度。利用hdparm -Ttu盘速度进行深度测试,增加对cache读写速度的测试。(需要root权限)



对于软件需求的高级功能,经过和导师的交流,u盘修复和格式化已经有了大体的思路,但杀毒和检测u盘是否被篡改的解决方案还没有定下来。

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值