Qt学习点滴积累

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 m_rootMap; //这里的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 映射表,返回QMap

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



 
  
 
  


你可能感兴趣的:(数据库,实用,qt)