您的位置:首页 > 编程语言 > Qt开发

Qt学习点滴积累

2015-11-11 15:35 363 查看
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()<<key<<":"<<port;
}
}

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<int, float>.

QMap<QString,QVariant> m_rootMap; //这里的QVariant相当于QMap<int, float>

//QMap<int, float>插入QMap<QString,QVariant>映射表

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<QString,QVariant>映射表,返回QMap<int, float>

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<<seg;

    }

    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<<seg;

}

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



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: