网站服务器迁移


今天迁移了一下服务器,记录一下:
1、修改域名A地址
2、域名解析生效后,电脑ping域名,看解析出来的ip是否正确,如DNS未刷新,cmd里面输入以下命令刷新:

ipconfig /flushdns

1.png
3、打包原服务器网站目录,其中目录为/www/wwwroot/abcd.com:

tar -zcvf /www/wwwroot/abcd.tar /www/wwwroot/abcd.com

4、登录新服务器,scp复制网站目录文件,yourip是你旧服务器ip,输入ssh密码后复制

scp -P 22 root@yourip:/home/wwwroot/abcd.tar /root/

5、解压:

tar -xzvf /root/abcd.tar

6、新增站点,目录指向解压后的目录
7、导出原网站数据库,然后在服务器里面导入
8、注意一些配置问题


QT红外热成像图


使用QT编写红外摄像头上位机,通过串口接收红外模块的数据后,显示热成像图,显示模块效果如下:
QT热成像.png

思路:
求出温度点的平均值,根据平均数设置合适的最大最小显示温度,将温度值转为伪彩色,用QImage的setPixelColor显示出来,由于红外摄像头只有32*24个点,再用双向性插值法温度图形进行缩放。

使用方法:

TemperatureView *tempView=new TemperatureView(32,24,this);//实例化对象
tempView->setData(tempData);//在接收到红外数据后,把数据保存在tempData,然后调用setData刷新显示



C++如何读取字节指定位


做上位机软件,需要读取字节的位操作,以下是两种常用操作:
读取某一位操作:

int readbit(unsigned char c,int pos)
{
    unsigned char b_mask=0x01;
    b_mask=b_mask<<pos;
    if((c&b_mask)==b_mask)
        return 1;
    else
        return 0;
}

例如:10010010,读取第1位readbit(c,1);//(结果为1)
读取连续几个位操作:

int readbits(unsigned char c,int start,int end)
{
    unsigned char e_mask=0xff>>(7-end);
    unsigned char s_mask=0xff<<start;
    return (c&e_mask&s_mask)>>start;
}

例如:10010010,读取0-4位,readbits(c,0,4);(结果为00010010)


QT读取系统串口列表


做上位机需要用到串口通讯,软件的串口号可以通过读取系统注册表的方式获取,方法如下:
获取串口列表:

QStringList ports=getPorts();

getPorts函数实现:

QStringList getPorts()
{
    QStringList m_listcomboName;
    QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
    QSettings *settings = new QSettings( path, QSettings::NativeFormat);
    QStringList key = settings->allKeys();
    int num = (int)key.size();
    QString value;
    for(int i=0; i<num; i++)
    {
        value = getcomm(i, "value");
        m_listcomboName<<value;
    }
    return m_listcomboName;
}

QString getcomm(int index,QString keyorvalue)
{    //index为索引号,keyorvalue为选择返回值应该为key还是value
    QString commresult;
    HKEY hKey;
    wchar_t keyname[256]; //键名数组
    char keyvalue[256];  //键值数组
    DWORD keysize,type,valuesize;
    QString keymessage;//键名
    QString message;
    QString valuemessage;//键值
    if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"),0,KEY_READ,&hKey)!=0)
    {
        QString error="Cannot open regedit!";//无法打开注册表时返回error
        return error;
    }
    int indexnum = index;//要读取键值的索引号
    keysize=sizeof(keyname);
    valuesize=sizeof(keyvalue);
    if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0)//列举键名和值
    {
        for(int i=0;i<(int)keysize;i++)
        {
            message=keyname[i];
            keymessage.append(message);
        }//读取键名
        for(int j=0;j<(int)valuesize;j++)
        {
             if(keyvalue[j]!=0x00)
             {
                 valuemessage.append(keyvalue[j]);
             }
        }//读取键值
        if(keyorvalue=="key")
        {
             commresult=keymessage;
        }
        if(keyorvalue=="value")
        {
             commresult=valuemessage;
        }
    }
    else
    {
         commresult="nokey";
    } //列举键名和值
    return commresult;
    ::RegCloseKey(hKey);//关闭注册表
}