位置调整功能,以前是直接写在设备按钮这个自定义控件类中,核心就是安装事件过滤器,识别鼠标按下、鼠标移动、鼠标松开,这三个event,做出相应的处理即可,后面发现这个功能其实很多自定义控件或者widget都会使用到,需要在一个容器中拖动指定的控件,索性单独提取出来一个类专门干这个事情,后面发出开源代码。
位置调整也叫设备拖动,一般是要在设计阶段时候,运行阶段是禁用的,不然在运行阶段让操作员不小心拖动了位置,导致乱七八糟的,也不好看,所以一般的处理是要么放到系统设置中独立的位置调整模块,要么有个菜单或者按钮进入可拖动的编辑模式,所有设备完成拖动以后,单击保存按钮立即将所有设备的位置信息存储到设备表中,同时立即更新主界面的设备的位置,这样不用重启也能使用。
通用移动控件开源:https://gitee.com/feiyangqingyun/QWidgetDemo https://github.com/feiyangqingyun/QWidgetDemo
文件名称:movewidget
体验地址:https://gitee.com/feiyangqingyun/QWidgetExe https://github.com/feiyangqingyun/QWidgetExe
文件名称:bin_sams.zip
#include "frmconfigposition.h"
#include "ui_frmconfigposition.h"
#include "quiwidget.h"
#include "devicehelper.h"
frmConfigPosition::frmConfigPosition(QWidget *parent) : QWidget(parent), ui(new Ui::frmConfigPosition)
{
ui->setupUi(this);
this->initForm();
}
frmConfigPosition::~frmConfigPosition()
{
delete ui;
}
void frmConfigPosition::initForm()
{
ui->navTitle->setText("地图列表");
ui->navTitle->setLeftIcon(0xf0e8);
ui->navTitle->setRightIcon5(0xf1f8);
ui->widgetRight->setFixedWidth(App::RightWidth);
DeviceHelper::initDeviceButton(ui->labMap);
DeviceHelper::initDeviceMap(ui->listWidget);
if (ui->listWidget->count() > 0) {
ui->listWidget->setCurrentRow(0);
on_listWidget_pressed();
}
}
void frmConfigPosition::initList()
{
DeviceHelper::initDeviceMap(ui->listWidget);
}
void frmConfigPosition::on_listWidget_pressed()
{
int row = ui->listWidget->currentRow();
if (row < 0) {
return;
}
DeviceHelper::initDeviceMapCurrent(ui->labMap, DBData::MapNames.at(row));
}
void frmConfigPosition::on_btnSave_clicked()
{
DeviceHelper::saveDeviceButtonPosition();
QUIHelper::showMessageBoxInfo("保存位置信息成功!", 2);
}
原文:https://www.cnblogs.com/feiyangqingyun/p/11980878.html