在qtDesigner中已经画好的界面,如何在其基础上加上QSplitter,使上下表格中间可以实现拖拽。
打开软件时使用QFile加载配置文件到QMap。
更改QTableWidget的某一行的底部颜色为其他颜色。
1.QSplitter
原ui界面箭头所指的地方无法进行上下拖拽。
代码实现:
void YF_bcmuInfo::dragInterface()
{
//bmu界面上下可拖拽功能
QSplitter* splitterBmu = new QSplitter(Qt::Vertical, this);
//先获取到上下表格对象
QWidget* tbWBmu = ui.tbWBmu;
QWidget* tbWAlarmFault = ui.tbWAlarmFault;
//从原布局上去除掉这两个表格对象
ui.tabBmu->layout()->removeWidget(tbWBmu);
ui.tabBmu->layout()->removeWidget(tbWAlarmFault);
//给splitter加上两个表格对象
splitterBmu->addWidget(tbWBmu);
splitterBmu->addWidget(tbWAlarmFault);
//设置拉伸因子
splitterBmu->setStretchFactor(0, 7); // 第一个部件(tbWBcmu)的拉伸因子为 7
splitterBmu->setStretchFactor(1, 3); // 第二个部件(tbWBcmuFault)的拉伸因子为 3
//给原布局加上splitter对象
ui.tabBmu->layout()->addWidget(splitterBmu);
//另一个界面逻辑相同
//bcmu界面上下可拖拽功能
QSplitter* spliiterBcmu = new QSplitter(Qt::Vertical, this);
QWidget* tbWBcmu = ui.tbWBcmu;
QWidget* tbWBcmuFault = ui.tbWBcmuFault;
ui.tabBcmu->layout()->removeWidget(tbWBcmu);
ui.tabBcmu->layout()->removeWidget(tbWBcmuFault);
spliiterBcmu->addWidget(tbWBcmu);
spliiterBcmu->addWidget(tbWBcmuFault);
ui.tabBcmu->layout()->addWidget(spliiterBcmu);
//htem界面上下可拖拽功能
}
2.QFile,QMap
本地文件profile
打开程序时调用以下函数
QMap<QString, double> rateMap = {
{"BCMU电压倍率",100},
{"BCMU电流倍率",10},
{"BCMU环境温度",20},
{"BCMU累计容量",100},
{"BCMU电池包总电压设置",100},
{"BMU电压倍率",1000},
{"温度",20},
{"最大最小值编号",1}
};
void YF_bcmuInfo::readProfile()
{
//构建文件路径
QString filePath = QDir::currentPath();
QString profilePath = filePath + "/profile/profile.txt";
//构建文件对象
QFile profile(profilePath);
//打开文件,以只读的方式,第二个参数QIODevice::Text表示以文本方式打开,默认是以二进制的方式打开
if (!profile.open(QIODevice::ReadOnly|QIODevice::Text)) {
qDebug() << "打开配置文件失败";
return;
}
//文件流对象
QTextStream stream(&profile);
//设置编码格式,不然读出来的数据是乱码
stream.setCodec("UTF-8");
//循环读取数据
while (!stream.atEnd()) {
//读取一行去掉前后空白
QString lineData = stream.readLine().trimmed();
//以空格分开
QStringList lineList=lineData.split(" ");
if (lineList.size() == 2) {
QString label = lineList[0];
double value = lineList[1].toDouble();
//存入map,rateMao定义为全局变量
rateMap[label] = value;
}
}
//关闭文件
profile.close();
}
3.设置tablewidget的表格的某一行边框线为其他颜色
if (tbWidget == ui.tbWbcmuParam_set) {
// 设置不同区域的边框样式
for (int row = 0; row < tbWidget->rowCount(); ++row) {
for (int col = 0; col < tbWidget->columnCount(); ++col) {
//我表格中每一项数据是自定义的一个小窗口,所以获取cellwidget设置底部边框样式
QWidget* widget = ui.tbWbcmuParam_set->cellWidget(row, col);
// 设置上部分和中间的底部边框
if (row == 1||row == 4) {
QString style = "border-bottom: 1px solid rgba(128, 128, 128, 0.5);";
widget->setStyleSheet(style);
}
}
}
}