1. int 、 float 转化成QString
QString("%1").arg(value); //类似printf
2.注册元数据,需要提供public 默认构造函数、复制构造函数、析构函数
qRegisterMetaType<DataTrans>("DataTrans"); //注册元数据
3.QMultimap 使用以及遍历
QMultiMap<QString,quint16>map;
map.insert("192.168.2.102",2012);
map.insert("192.168.2.103",2013);
map.insert("192.168.2.104",2014);
foreach(QString key, m_devIPMap.keys())
{
foreach(quint16 port, m_devIPMap.values(key))
{
m_socket->writeDatagram(Data,QHostAddress(key),port);
//qDebug()<
}
4.字符串List替换(QStringList)
//每个值加上单引号'',e.g. 192.168.1.102转化成'192.168.1.102'
QStringList val=values,valReplaced;
valReplaced = val.replaceInStrings(QRegExp("^(.*)$"),"'\\1'");
5.QStringList插入分隔符----','
QString part3 = valReplaced.join(",");
6.Qt中使用SQLite事务管理
m_db.transaction();
bool ok=false;
ok=insertMainTable(mainTable,sqlInsert,timeStamp);
foreach (QString eachType, typeList)
{
ok=insertDataTable(sensorDataTbl,sqlInsert,eachType,timeStamp);
}
m_db.commit(); // 提交
7.使用在QMap映射表嵌套使用QMap时,需要时QVariant代替QMap
QMap
//QMap
bool DataTrans::insertDataMap(const QString &item,int idx, float value)
{
if(m_dataTypeList.contains(item,Qt::CaseInsensitive))
{
if(m_rootMap.contains(item))
{
QVariant vmap = m_rootMap.value(item);
QMap<int, float> dataMap;
dataMap = vmap.value< QMap<int, float> >(); //取出原来的映射表
dataMap.insert(idx,value); //刷新原来的映射表
m_rootMap.insert(item,vmap.fromValue(dataMap)); //回写至总映射表
return true;
}
}
return false;
}
QMap<int, float> DataTrans::getDataMap(const QString &item) const
{
QMap<int, float> ret;
if(m_rootMap.contains(item))
{
QVariant map=m_rootMap.value(item);
ret=map.value< QMap<int, float> >();
}
return ret;
}
8.QTableView列标题初始化
QStringList MainWindow::initTableViewModel(QStandardItemModel* model)
{
QStringList headerLabel;
QString seg ;
headerLabel<<"设备ID号"<<"时间"<<"传感器类型"<<"参考值";
for(int i=1;i<11;++i)
{
seg = QString("传感器_%1").arg(i);
headerLabel<
model->setHorizontalHeaderLabels(headerLabel);
ui->tvData->setModel(model);
ui->tvData->verticalHeader()->setVisible(false);
return headerLabel;
}
9.使用QSqlQueryModel+QTableView 显示数据库查询结果
void MainWindow::freshData(const DataTrans& dataGet)
{
//TODO: FIXED if( dataGet.getIP()== m_roomMap.value(roomID))
{
if(m_initTvModel) //删除tableView初始化时的内存
{
m_initTvModel->deleteLater();
m_initTvModel = NULL ;
}
m_sqlQuery->openDatabase();
QString modelQuery,cols,seg;
QStringList colList;
int i = 0 ;
colList<<"SCUID"<<"STORETIME"<<"SENSORTYPE"<<"SENSORDATA_0";
for(i=1;i<11;++i)
{
seg = QString("SENSORDATA_%1").arg(i);
colList<}
cols = colList.join(',');modelQuery = QString(TABLEVIEW_SQL).arg(cols);m_sqlModel->setQuery(modelQuery);for(i=0;i<m_sqlModel->columnCount();++i)m_sqlModel->setHeaderData(i, Qt::Horizontal,m_tableViewHeader.at(i));ui->tvData->setModel(m_sqlModel);ui->tvData->resizeColumnToContents(1);//自动调整列宽(时间那一列)ui->tvData->setAlternatingRowColors(true);ui->tvData->setStyleSheet("QTableView{background-color: rgb(250, 250, 115);""alternate-background-color: rgb(141, 163, 215);}");ui->tvData->show();m_sqlQuery->closeDatabase();}
}
10.QTableView自动调整所有的列宽
ui->tvData->resizeColumnsToContents();//自动调整列宽(所有),2015-12-18