价钱网站建设,科技作品,网站的图片尺寸,企业如何数字化转型文章目录 定时器(时间)位置信息QTableWidget用cellwidget添加控件隐藏QTableWidget的滚动条自动调整适应大小 UDPUDP ClientUDP ServerUDP udpSocket.readDatagram重要参数使用多线程udp 自定义信号和槽UDP服务端接收数据(全局变量) QWT设置标题数轴相关设置坐标轴范围设置坐标… 文章目录 定时器(时间)位置信息QTableWidget用cellwidget添加控件隐藏QTableWidget的滚动条自动调整适应大小 UDPUDP ClientUDP ServerUDP udpSocket.readDatagram重要参数使用多线程udp 自定义信号和槽UDP服务端接收数据(全局变量) QWT设置标题数轴相关设置坐标轴范围设置坐标轴备注设置坐标轴数值的字体 添加数据曲线图注意点 直方图 设置网格左键选中放大右键恢复上级CTRL右键恢复原样显示图标(一): QwtLegend显示图标(二): QwtPlotLegendItemQWT FFT 字符串截取进制转换QString转intQString转QByteArray(16进制)QByteArray(16进制)转float字符串转floatQhostaddress 与 Qstring互转2个uint8_t拼接3个uint8_t拼接 响应式控件改变位置Qt:cannot open output file debug\XXX.exe: Permission denied类型断言静态类型断言reinterpret_cast 定时器(时间)
//TitleDialogOne.cpp
//用new的方式创建一个QTimer对象
timer new QTimer(this); //QTimer *timer;
//将定时器的溢出信号连接到自定义的槽函数。
connect(timer,QTimer::timeout,this,TitleDialogOne::onNowTimeOut);
timer-start(1000);//TitleDialogOne.cpp
void TitleDialogOne::onNowTimeOut(){QString dt QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss);ui-labelNowTime-setText(dt);
}位置信息
QTableWidget用cellwidget添加控件
//单元格添加样式
ui-tableWidgetTop-setCellWidget(0, 1, new QSpinBox);//单元格读取
getTop1 (QSpinBox *)ui-tableWidgetTop-cellWidget(0,1);//QSpinBox* getTop1;//#define TOP_CHL_COUNT (16) /* 通道数量 */
getTop1-setRange(0,TOP_CHL_COUNT); //设置可选范围
getTop1-setValue(5); //设置初始值为5隐藏QTableWidget的滚动条
ui-tableWidget-setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//隐藏横向滚动条
ui-tableWidget-setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//隐藏纵向滚动条自动调整适应大小
ui-tableWidgetTop-horizontalHeader()-setSectionResizeMode(0, QHeaderView::ResizeToContents);
ui-tableWidgetTop-horizontalHeader()-setStretchLastSection(true);UDP
UDP Client
// QUdpSocket *myUdpSocket;//UDP套接字对象
// QHostAddress myGroupAddress;//组播地址
myUdpSocket new QUdpSocket;//初始化socket
myGroupAddress.setAddress(239.2.2.222);//设置组播地址
myUdpSocket-bind(8080);//绑定端口号
if(myType 2){ //myType: 只是一个int类型的变量来区分是单播(一对一)还是多播(组播一对多)//组播的数据的生存期数据报没跨1个路由就会减1.表示多播数据报只能在同一路由下的局域网内传播myUdpSocket-setSocketOption(QAbstractSocket::MulticastTtlOption,1);
}使用定时器每个1秒发送
void UDPClient::InitTimer(){myTimer new QTimer;//初始化定时器connect(myTimer,QTimer::timeout,this,[]{SendData();});myTimer-start(1000);//开启定时器每1秒发送一次数据
}
//发送
void UDPClient::SendData(){QByteArray _data hello;if(myType 0){//单播QHostAddress _peerHostAddress QHostAddress(my_test_ip);//对位服务器IPquint16 _port my_test_port;//对位服务器端口(int)if(-1 !myUdpSocket-writeDatagram(_data.data(),_data.size(),_peerHostAddress,_port)){qDebug() 单播 Send data : _dataendl;}myUdpSocket-flush();}else if(myType 1){ //广播quint16 _port project_port;//广播端口(int)if(-1 !myUdpSocket-writeDatagram(_data.data(),QHostAddress::Broadcast,_port)){qDebug() 广播 Send data : _dataendl;}myUdpSocket-flush();}else if(myType 2){//组播quint16 _port project_port;//组播端口(int)if(-1 ! myUdpSocket-writeDatagram(_data.data(),myGroupAddress,_port)){qDebug() 组播 Send data : _dataendl;}myUdpSocket-flush();}else{qDebug() mType is error! endl;return;}
}单播(一对一): 需要获取服务端的ip和端口号 myUdpSocket-writeDatagram写入成功后可以输出查看值 广播(一对所有的通信方式):确认服务端端口发起请求 myUdpSocket-writeDatagram写入成功后可以输出查看值 多播(组播一对多): 需要获取服务端的端口号发起请求 myUdpSocket-writeDatagram写入成功后可以输出查看值
UDP Server
void UDPServer::InitSocket()
{//初始化socket设置组播地址mUdpSocket new QUdpSocket;mGroupAdress.setAddress(project_zubo_address);if(mType 0 || mType 1){//绑定本地IP和端口号mUdpSocket-bind(my_test_server_port);}else if(mType 2){if(mUdpSocket-bind(QHostAddress::AnyIPv4,my_test_server_port,QUdpSocket::ShareAddress)){//加入组播地址mUdpSocket-joinMulticastGroup(mGroupAdress);qDebug()(Join Multicast Adrress [)mGroupAdress.toString()(] Successful!)endl;}}else{qDebug() mType is error! endl;return;}connect(mUdpSocket,QUdpSocket::readyRead,this,[]{ReadPendingDataframs();});
}void UDPServer::ReadPendingDataframs()
{QByteArray _data;_data.resize(mUdpSocket-pendingDatagramSize());if(mType 0)//Unicast{QHostAddress *_peerHostAddress new QHostAddress(my_test_ip);quint16 _port my_test_port;while(mUdpSocket-hasPendingDatagrams()){mUdpSocket-readDatagram(_data.data(),_data.size(),_peerHostAddress,_port);//接收指定IP和端口的udp报文qDebug()Unicast Receive data : QString::fromLatin1(_data)endl;}}else if(mType 1)//Broadcast{QHostAddress _peerHostAddress;quint16 _port;while(mUdpSocket-hasPendingDatagrams()){mUdpSocket-readDatagram(_data.data(),_data.size(),_peerHostAddress,_port);//接收同一子网的udp报文qDebug()Broadcast Receive data : QString::fromLatin1(_data)endl;}}else if(mType 2)//Multicast{QHostAddress _peerHostAddress;quint16 _port;while(mUdpSocket-hasPendingDatagrams()){mUdpSocket-readDatagram(_data.data(),_data.size(),_peerHostAddress,_port);//接收同组的udp报文qDebug()Multicast Receive data : QString::fromLatin1(_data)endl;}}else{qDebug() mType is error! endl;return;}
}UDP udpSocket.readDatagram
udpSocket.hasPendingDatagrams()QUdpSocket类的readDatagram()函数用于从UDP套接字中读取数据报。它的函数原型如下
QHostAddress QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address nullptr, quint16 *port nullptr)参数解释
data指向用于存储接收数据的缓冲区的指针。maxSize缓冲区的最大大小即可以接收的最大数据量。address可选参数用于返回发送方的IP地址。port可选参数用于返回发送方的端口号。
使用readDatagram()函数可以将接收到的数据存储到指定的缓冲区中并返回接收到的数据大小。以下是一个示例
QUdpSocket udpSocket;// 绑定到指定的IP地址和端口
udpSocket.bind(QHostAddress::Any, 1234);// 监听是否有数据可读
QObject::connect(udpSocket, QUdpSocket::readyRead, [udpSocket]() {while (udpSocket.hasPendingDatagrams()) {QByteArray datagram;datagram.resize(udpSocket.pendingDatagramSize());QHostAddress senderAddress;quint16 senderPort;// 读取数据报udpSocket.readDatagram(datagram.data(), datagram.size(), senderAddress, senderPort);// 处理接收到的数据QString receivedData QString::fromUtf8(datagram);qDebug() Received data: receivedData;qDebug() Sender address: senderAddress.toString();qDebug() Sender port: senderPort;}
});在上面的代码中我们创建了一个QUdpSocket对象并使用bind()函数将其绑定到任意IP地址和端口1234。然后使用readyRead信号来监听是否有数据可读。当有数据可读时通过readDatagram()函数读取数据并将其转换为QString类型进行处理。同时还可以获取发送方的IP地址和端口号。这样您就可以使用readDatagram()函数在Qt中监听UDP套接字接收到的数据了。 重要参数
// QUdpSocket *mUdpSocket;//UDP套接字对象
// QHostAddress mGroupAddress;//组播地址
mUdpSocket new QUdpSocket; //实例化对象
mGroupAdress.setAddress(project_zubo_address);//确认组播的地址mUdpSocket-bind(my_test_server_port);//绑定本地IP和端口号
mUdpSocket-bind(QHostAddress::AnyIPv4,my_test_server_port,QUdpSocket::ShareAddress);//绑定IPv4下的组播端口
使用多线程udp
加QMutex线程锁将信号和槽的udp接收写在run函数中
//#include QMutex
//QMutex mutex;
void UdpThread::run(){mutex.lock(); //线程锁connect(udpServer-myUdpSocket,QUdpSocket::readyRead,this,[](){while (udpServer-myUdpSocket-hasPendingDatagrams()){//读取数据QByteArray datagram; //16进制datagram.resize(udpServer-myUdpSocket-pendingDatagramSize());udpServer-myUdpSocket-readDatagram(datagram.data(), datagram.size());//数据处理}})mutex.unlock();//线程解锁
}若对传输速度有要求就不要用到信号和槽 自定义信号和槽
//自定义信号
#include signalclass.hextern QString globalStr;SignalClass::SignalClass()
{
}void SignalClass::setValueSet(const QString data){emit setValue(data);
}SignalClass::~SignalClass(){}//自定义槽
#include slotclass.h
#include QDebugSlotClass::SlotClass()
{}
void SlotClass::slotValue(const QString data){qDebug() data;
}SlotClass::~SlotClass(){}
//引用
signalObj new SignalClass;//SignalClass *signalObj
slotObj new SlotClass; //SlotClass *slotObj
connect(signalObj,SignalClass::setValue,slotObj,SlotClass::slotValue);UDP服务端接收数据(全局变量)
#include udpserver.hextern QString globalStr;//这个定义在mainwindow.cpp中const int project_port 8880;
const QString zubo_address 239.2.2.222;
const int my_test_server_port 5500;
const QString my_test_ip 192.168.1.191;
const int my_test_port 5500;UDPServer::UDPServer(){myType 2;InitSocket();
}void UDPServer::InitSocket(){myUdpSocket new QUdpSocket;myGroupAddress.setAddress(zubo_address);//设置组播地址if(myType 0||myType 1){//绑定本地IP和端口号myUdpSocket-bind(my_test_server_port);}else if(myType 2){if(myUdpSocket-bind(QHostAddress::AnyIPv4,my_test_server_port,QUdpSocket::ShareAddress)){//加入组播地址myUdpSocket-joinMulticastGroup(myGroupAddress);qDebug()(Join Multicast Adrress [)myGroupAddress.toString()(] Successful!)endl;}}else{qDebug() mType is error! endl;return;}//事件connect(myUdpSocket,QUdpSocket::readyRead,this,UDPServer::ReceiveHexData);
}
void UDPServer::ReceiveStrData(){globalStr ReadPendingDataframs();qDebug() udp-globalUdpMessage: globalStr;testSendSetValue(globalStr);
}
void UDPServer::testSendSetValue(const QString data){//connect(myUdpSocket,UDPServer::setValue,this,ConfigDialog::showTextEdit2,Qt::DirectConnection);emit setValue(data);
}
//读取udp传输过来的字符串信息
QString UDPServer::ReadPendingDataframs(){QString buffer;QByteArray _data;_data.resize(myUdpSocket-pendingDatagramSize());if(myType 0)//Unicast{QHostAddress *_peerHostAddress new QHostAddress(my_test_ip);quint16 _port my_test_port;while(myUdpSocket-hasPendingDatagrams()){myUdpSocket-readDatagram(_data.data(),_data.size(),_peerHostAddress,_port);//接收指定IP和端口的udp报文qDebug()Unicast Receive data : QString::fromLatin1(_data)endl;buffer QString::fromLatin1(_data);}}else if(myType 1)//Broadcast{QHostAddress _peerHostAddress;quint16 _port;while(myUdpSocket-hasPendingDatagrams()){myUdpSocket-readDatagram(_data.data(),_data.size(),_peerHostAddress,_port);//接收同一子网的udp报文qDebug()Broadcast Receive data : QString::fromLatin1(_data)endl;buffer QString::fromLatin1(_data);}}else if(myType 2)//Multicast{QHostAddress _peerHostAddress;quint16 _port;while(myUdpSocket-hasPendingDatagrams()){myUdpSocket-readDatagram(_data.data(),_data.size(),_peerHostAddress,_port);//接收同组的udp报文qDebug()Multicast Receive data : QString::fromLatin1(_data)endl;buffer QString::fromLatin1(_data);}}else{qDebug() mType is error! endl;buffer error;}//testSendSetValue(buffer);return buffer;
}
//读取接收到的16进制数
void UDPServer::ReceiveHexData(){ while (myUdpSocket-hasPendingDatagrams()){// 读取数据QByteArray datagram;datagram.resize(myUdpSocket-pendingDatagramSize());myUdpSocket-readDatagram(datagram.data(), datagram.size());// 将数据转换为16进制字符串
// QString hexData QString(datagram.toHex());globalStr QString(datagram.toHex()); //将接收到的16进制数据赋值给权全局变量// 打印16进制数据qDebug() udp-Hex-Received data: globalStr;}
}UDPServer::~UDPServer(){delete myUdpSocket;
}在另一个文件(UI文件)中也是connect(myUdpSocket,QUdpSocket::readyRead,this,UDPServer::ReceiveHexData);只不过形式变了 //...
extern QString globalStr;//这个定义在mainwindow.cpp中ConfigDialog::ConfigDialog(QWidget *parent) :QWidget(parent),ui(new Ui::ConfigDialog)
{ui-setupUi(this);ui-textEdit_2-setReadOnly(true);//udpudpServer new UDPServer;connect(udpServer-myUdpSocket,QUdpSocket::readyRead,this,[](){ui-textEdit_2-insertPlainText(globalStr \n); //将全局变量中的数据显示出来(udp的接收到的数据)});
}想法是: 当发生客户端UDP传输去读数据时在俩个文件(ui文件和udp server)中都发生connect指令 QWT
设置标题
ui-qwtPlot-setTitle(QStringLiteral(这是标题));带属性设置标题 QwtText title;
title.setText(QStringLiteral(属性标题));// 设置字体 字体大小 加粗 斜体 字体颜色
QFont font;
font.setFamily(Microsoft YaHei UI Light);
font.setPointSize(20);
font.setBold(true);
font.setItalic(true);
title.setFont(font);
//设置字体颜色
title.setColor(Qt::red);
ui-qwtPlot_1-setTitle(title);数轴相关
ui-qwtPlot-enableAxis(QwtAxis::YLeft,true); // 左x轴
ui-qwtPlot-enableAxis(QwtAxis::YRight,true); // 右x轴
ui-qwtPlot-enableAxis(QwtAxis::XTop,true); // 顶部y轴
ui-qwtPlot-enableAxis(QwtAxis::XBottom,true); // 底部y轴设置坐标轴范围
//ui-qwtPlot-setAxisScale(坐标枚举,最小值,最大值,步长);
ui-qwtPlot-setAxisScale(QwtAxis::YLeft,0,50,10);
ui-qwtPlot-setAxisScale(QwtAxis::YRight,0,50,10);
ui-qwtPlot-setAxisScale(QwtAxis::XTop,0,50,10);
ui-qwtPlot-setAxisScale(QwtAxis::XBottom,0,150,30);设置坐标轴备注
//ui-qwtPlot-setAxisTitle(坐标枚举,坐标名称);
ui-qwtPlot-setAxisTitle(QwtAxis::YLeft,YLeft);
ui-qwtPlot-setAxisTitle(QwtAxis::YRight,YRight);
ui-qwtPlot-setAxisTitle(QwtAxis::XTop,XTop);
ui-qwtPlot-setAxisTitle(QwtAxis::XBottom,XBottom);设置坐标轴数值的字体
//QFont xtopFont(字体名称,字体大小)
QFont xtopFont(宋体,14);
xtopFont.setBold(true);
xtopFont.setItalic(true);
//ui-qwtPlot-setAxisFont(坐标枚举,QFont)
ui-qwtPlot-setAxisFont(QwtAxis::XTop,xtopFont);添加数据
曲线图
//显示那个方位的坐标
ui-qwtPlot-enableAxis(QwtAxis::YLeft,true); // 左x轴
ui-qwtPlot-enableAxis(QwtAxis::XBottom,true); // 底部y轴
//设置坐标范围和步长
ui-qwtPlot-setAxisScale(QwtAxis::YLeft,0,10,1);
ui-qwtPlot-setAxisScale(QwtAxis::XBottom,0,10,1);//添加数据(重点)
QwtPlotCurve *plotCurve new QwtPlotCurve();//#include qwt_plot_curve.h
plotCurve-setCurveAttribute(QwtPlotCurve::Fitted);
double time[10]{1,2,3,4,5,6,7,8,9,10};
double val[10]{3, 5, 8, 7, 2, 0, 7, 9, 1,10};
//plotCurve-setSamples(x,y,x-valueNumber);(重点)
plotCurve-setSamples(time,val,5);
plotCurve-setStyle(QwtPlotCurve::CurveStyle::Lines);
//显示到控件上(重点)
plotCurve-attach(ui-qwtPlot);注意点 使用setSamples的时候如果你的x轴数组y轴数组会出现以下情况 源码:
Main-setAxisScale(QwtAxis::YLeft,0,1600,100);
Main-setAxisScale(QwtAxis::XBottom,0,200);double x[200];
double y[1600];
for(int x1 0; x1200;x1){x[x1] x1;
}
for(int y1 0; y11600;y1){y[y1] y1;
}
sine_main[0].c-setSamples(x,y,1600);若只修改上面的x[200]为x[1600]之后都不修改 可看出超出没赋值部分就是默认为0 只有这样写我们才能的到直线 Main-setAxisScale(QwtAxis::YLeft,0,1600,100);
Main-setAxisScale(QwtAxis::XBottom,0,1600);double x[1600];
double y[1600];
for(int x1 0; x11600;x1){
x[x1] x1;
}
for(int y1 0; y11600;y1){
y[y1] y1;
}
sine_main[0].c-setSamples(x,y,1600);可看出x轴一定要大于y轴setSamples(x,y,显示大小)这个显示大小可以随x轴来获取 直方图
// 不设置这个属性不会显示标签
//设置直方图
ui-qwtPlot-insertLegend(new QwtLegend()); //#include qwt_legend.h
ui-qwtPlot-setPalette(Qt::white);//设置背景
ui-qwtPlot-setAxisAutoScale(QwtAxis::XBottom,true);//自动设置轴
ui-qwtPlot-enableAxis(QwtAxis::XBottom,false);//取消方位坐标轴QwtPlotMultiBarChart *plotMultiBarChart new QwtPlotMultiBarChart(); //#include qwt_plot_multi_barchart.h
plotMultiBarChart-setLayoutPolicy(QwtPlotMultiBarChart::AutoAdjustSamples);
plotMultiBarChart-setSpacing(20);
plotMultiBarChart-setMargin(3);static const char* colors[]{DarkOrchid,SteelBlue,Gold};//设置颜色数组
const int numSamples 5; //设置通道
const int numBars sizeof(colors)/sizeof(colors[0]);// 设置标签文字
QListQwtText titleList;
titleList.append(QwtText(001));//标签文字名称
titleList.append(QwtText(002));//标签文字名称
titleList.append(QwtText(003));//标签文字名称
plotMultiBarChart-setBarTitles(titleList); //设置进
plotMultiBarChart-setLegendIconSize(QSize(10,10));//标签图标大小// 设置直方图属性
for(int i 0;inumBars;i){QwtColumnSymbol *symbol new QwtColumnSymbol(QwtColumnSymbol::Box);symbol-setLineWidth(2);symbol-setFrameStyle(QwtColumnSymbol::NoFrame);symbol-setPalette(QPalette(colors[i]));plotMultiBarChart-setSymbol(i,symbol);
}
// 添加数据
QVectorQVectordouble series;
for(int i0;inumSamples;i){QVectordouble values;for(int j0;jnumBars;j){values(2j%8); //这里进行大小的设置}seriesvalues;
}
// 显示到控件上
plotMultiBarChart-setSamples(series);
plotMultiBarChart-attach(ui-qwtPlot);设置网格
QwtPlotGrid *gridTop new QwtPlotGrid();
gridTop-setPen(Qt::gray, 0.0, Qt::DotLine); //设置网格为灰色点线
gridTop-attach(ui-qwtPlot);左键选中放大右键恢复上级CTRL右键恢复原样
/* 默认左键选中放大右键恢复上级CTRL右键恢复原样 */
//QwtPlotZoomer *zoomerTop;
zoomerTop new MyZoomer(ui-qwtPlot-canvas());//plotTopLine-canvas()
zoomerTop-setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier);
zoomerTop-setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton);显示图标(一): QwtLegend
/*
Q_SIGNALS:void checked(const QVariant,bool,int);
public slots:void legendChecked(const QVariant , bool);
*/
QwtLegend *legend new QwtLegend;
legend-setDefaultItemMode( QwtLegendData::Checkable );
ui-qwtPlot-insertLegend(legend,QwtPlot::RightLegend);
connect(legend,SIGNAL(checked(const QVariant,bool,int)),SLOT(legendChecked( const QVariant , bool )));/*
//图例选择事件
void ChanOne::legendChecked(const QVariant itemInfo, bool on){//获取曲线QwtPlotItem *plotItem ui-qwtPlot-infoToItem(itemInfo);if(plotItem){plotItem-setVisible(on);}ui-qwtPlot-replot();
}
*/显示图标(二): QwtPlotLegendItem
前提提示需要一下操作才可以显示
QwtPlotCurve *a new QwtPlotCurve(tr(A));//设置曲线对象和图标文字
a-setPen(Qt::red,1); //设置颜色
a-attach(ui-qwtPlot); //将曲线添加到图表
//...简单的显示 QwtPlotLegendItem *d_legendItemTop new QwtPlotLegendItem();
d_legendItemTop-attach( ui-qwtPlot );设置最大列数 QwtPlotLegendItem *d_legendItemTop new QwtPlotLegendItem();
d_legendItemTop-setRenderHint( QwtPlotItem::RenderAntialiased );
d_legendItemTop-attach( ui-qwtPlot );
d_legendItemTop-setMaxColumns(1); //设置最大列数对齐方式 //QwtPlotLegendItem *d_legendItemTop new QwtPlotLegendItem();
//d_legendItemTop-setRenderHint( QwtPlotItem::RenderAntialiased );
//d_legendItemTop-attach( ui-qwtPlot );
//d_legendItemTop-setMaxColumns(1); //设置最大列数
d_legendItemTop-setAlignmentInCanvas( Qt::AlignRight | Qt::AlignTop ); //对齐方式(右上)设置背景颜色 //QwtPlotLegendItem *d_legendItemTop new QwtPlotLegendItem();
//d_legendItemTop-setRenderHint( QwtPlotItem::RenderAntialiased );
//d_legendItemTop-attach( ui-qwtPlot );
//d_legendItemTop-setMaxColumns(1); //设置最大列数
//d_legendItemTop-setAlignmentInCanvas( Qt::AlignRight | Qt::AlignTop ); //对齐方式(右上)
d_legendItemTop-setTextPen(QPen(QColor(Qt::white))); //设置字体颜色
d_legendItemTop-setBackgroundBrush(QColor(192, 192, 192, 192)); //设置背景颜色
d_legendItemTop-setBorderPen(QPen(QColor(Qt::blue))); //设置边框颜色设置边框半径(圆弧) //QwtPlotLegendItem *d_legendItemTop new QwtPlotLegendItem();
//d_legendItemTop-setRenderHint( QwtPlotItem::RenderAntialiased );
//d_legendItemTop-attach( ui-qwtPlot );
//d_legendItemTop-setMaxColumns(1); //设置最大列数
//d_legendItemTop-setAlignmentInCanvas( Qt::AlignRight | Qt::AlignTop ); //对齐方式(右上)
//d_legendItemTop-setTextPen(QPen(QColor(Qt::white))); //设置字体颜色
//d_legendItemTop-setBackgroundBrush(QColor(192, 192, 192, 192)); //设置背景颜色
//d_legendItemTop-setBorderPen(QPen(QColor(Qt::blue))); //设置边框颜色
d_legendItemTop-setBorderRadius(5); //设置边框半径(圆弧)设置边距 //QwtPlotLegendItem *d_legendItemTop new QwtPlotLegendItem();
//d_legendItemTop-setRenderHint( QwtPlotItem::RenderAntialiased );
//d_legendItemTop-attach( ui-qwtPlot );
//d_legendItemTop-setMaxColumns(1); //设置最大列数
//d_legendItemTop-setAlignmentInCanvas( Qt::AlignRight | Qt::AlignTop ); //对齐方式(右上)
//d_legendItemTop-setTextPen(QPen(QColor(Qt::white))); //设置字体颜色
//d_legendItemTop-setBackgroundBrush(QColor(192, 192, 192, 192)); //设置背景颜色
//d_legendItemTop-setBorderPen(QPen(QColor(Qt::blue))); //设置边框颜色
//d_legendItemTop-setBorderRadius(5); //设置边框半径(圆弧)
d_legendItemTop-setMargin( 4 ); //设置内边距(x轴)d_legendItemTop-setSpacing(4); //设置内边距(y轴)d_legendItemTop-setItemMargin(10); //设置项目边距QWT FFT
字符串截取 我们不是将获取到的数据放入全局变量中了吗?那个是转换成16进制后转换成QString来进行显示的所以我们需要数据处理的时候最简单的就是字符串的截取了 //mid
//QString strbuff str.mid(索引值,截取大小)
QString pageHead globalStr.mid(0,2);//0索引开始取2位
QString initState globalStr.mid(64,4);//64索引开始,取4位进制转换
QString转int
//QString转int
QString hexstr e02;
bool ok;
int hexnum hexstr.toInt(ok,16); // 表示以16进制方式读取字符串
qDebug()hexnumendl;注ok表示转换是否成功成功则ok为true失败则ok为false。 QString转QByteArray(16进制)
page_set_Node.chan1_Array.append(strAllArray[i].toLatin1());QByteArray(16进制)转float
float temp (float)bytebuff.toFloat(ok); //bool ok:返回值存放的变量0为成功字符串转float
float temp (float)strbuff.toFloat(ok); //bool ok:返回值存放的变量0为成功Qhostaddress 与 Qstring互转
QHostAddress ip;
QString strIp ip.toString();QString strIp;
QHostAddress ip QHostAddress(strIp);
2个uint8_t拼接
uint8_t a 0xAB;
uint8_t b 0xCD;uint16_t result ((uint16_t)a 8) | b;printf(拼接结果为: %04X\n, result);3个uint8_t拼接 我们将它转QString的arg() #include iostream
#include QString
#include QDebugint main() {uint8_t value1 01;uint8_t value2 02;uint8_t value3 03;QString result QString(%1%2%3).arg(value1).arg(value2).arg(value3);qDebug() result.toStdString();//toStdString():转换成string类型return 0;
}发现是123,但我们想要的先得到的是010203所以我们就要添加一些条件
#include iostream
#include QString
#include QDebugint main() {uint8_t value1 01;uint8_t value2 02;uint8_t value3 03;QString result QString(%1%2%3).arg(value1,2,10,QChar(0)).arg(value2,2,10,QChar(0)).arg(value3,2,10,QChar(0));qDebug() result.toStdString();//toStdString():转换成string类型return 0;
}可以的到010203但是若是091011的数据会呈现出091617原因是他是到十进制是就加一。18进制10在十进制中就是16所以0x11就是17没问题。但是我们的数据毕竟是不是091011所以我们要看QString(%1).arg(value1,2,10,QChar(0))这参数是什么定义
QString(%1).arg(值,宽度,转换的进制,填充数)所以可以这样来写
#include iostream
#include QString
#include QDebugint main() {uint8_t value1 09;uint8_t value2 10;uint8_t value3 11;QString result QString(%1%2%3).arg(value1,2,16,QChar(0)).arg(value2,2,16,QChar(0)).arg(value3,2,16,QChar(0));qDebug() result.toStdString(); .//toStdString():转换成string类型return 0;
}响应式控件改变位置 Qt:cannot open output file debug\XXX.exe: Permission denied 可能是软件未响应退出后程序还运行着之后你未关闭再次运行导致的错误 类型断言
静态类型断言
static_assert数据类型(实参)reinterpret_cast interpret解释诠释,reinterpret重新诠释
文章转载自: http://www.morning.mwmxs.cn.gov.cn.mwmxs.cn http://www.morning.mfbcs.cn.gov.cn.mfbcs.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.mjtft.cn.gov.cn.mjtft.cn http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn http://www.morning.klwxh.cn.gov.cn.klwxh.cn http://www.morning.fssmx.com.gov.cn.fssmx.com http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.nhzzn.cn.gov.cn.nhzzn.cn http://www.morning.qyllw.cn.gov.cn.qyllw.cn http://www.morning.hqrr.cn.gov.cn.hqrr.cn http://www.morning.bpmns.cn.gov.cn.bpmns.cn http://www.morning.bnfrj.cn.gov.cn.bnfrj.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.lcbt.cn.gov.cn.lcbt.cn http://www.morning.ngcbd.cn.gov.cn.ngcbd.cn http://www.morning.swwpl.cn.gov.cn.swwpl.cn http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.ygkq.cn.gov.cn.ygkq.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.bprsd.cn.gov.cn.bprsd.cn http://www.morning.sgrdp.cn.gov.cn.sgrdp.cn http://www.morning.jjzjn.cn.gov.cn.jjzjn.cn http://www.morning.lpcpb.cn.gov.cn.lpcpb.cn http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn http://www.morning.czcbl.cn.gov.cn.czcbl.cn http://www.morning.xbrxk.cn.gov.cn.xbrxk.cn http://www.morning.snlxb.cn.gov.cn.snlxb.cn http://www.morning.wlddq.cn.gov.cn.wlddq.cn http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.znsyn.cn.gov.cn.znsyn.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.sjqpm.cn.gov.cn.sjqpm.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.gpsrk.cn.gov.cn.gpsrk.cn http://www.morning.hdnd.cn.gov.cn.hdnd.cn http://www.morning.rkdw.cn.gov.cn.rkdw.cn http://www.morning.rjnm.cn.gov.cn.rjnm.cn http://www.morning.xpzgg.cn.gov.cn.xpzgg.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.flhnd.cn.gov.cn.flhnd.cn http://www.morning.mgnrc.cn.gov.cn.mgnrc.cn http://www.morning.znlhc.cn.gov.cn.znlhc.cn http://www.morning.jqpyq.cn.gov.cn.jqpyq.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn http://www.morning.qstjr.cn.gov.cn.qstjr.cn http://www.morning.qxnlc.cn.gov.cn.qxnlc.cn http://www.morning.wzjhl.cn.gov.cn.wzjhl.cn http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn http://www.morning.kgjyy.cn.gov.cn.kgjyy.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn http://www.morning.qfcnp.cn.gov.cn.qfcnp.cn http://www.morning.wslpk.cn.gov.cn.wslpk.cn http://www.morning.yrjym.cn.gov.cn.yrjym.cn http://www.morning.jfxth.cn.gov.cn.jfxth.cn http://www.morning.kfstq.cn.gov.cn.kfstq.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.lokext.com.gov.cn.lokext.com http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn http://www.morning.dxqfh.cn.gov.cn.dxqfh.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.lpyjq.cn.gov.cn.lpyjq.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.tbqxh.cn.gov.cn.tbqxh.cn http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn http://www.morning.xsctd.cn.gov.cn.xsctd.cn http://www.morning.pzqnj.cn.gov.cn.pzqnj.cn http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.nlmm.cn.gov.cn.nlmm.cn http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn http://www.morning.sjzsjsm.com.gov.cn.sjzsjsm.com http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn http://www.morning.cknsx.cn.gov.cn.cknsx.cn http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn