串口调试助手----------该程序使用Qt框架,C ++语言编译而成

项目文件介绍:

  1. main.cpp 该文件为该程序的入口程序
  2. mainwindow.h 该文件为该程序的主要声明部分
  3. mainwindow.cpp 该文件为该程序的主要定义部分
  4. mainwindow.ui 该文件为该程序的ui界面设计
  5. 界面.png 界面的显示效果

该文件中获取串口是通过读取Windows系统下的注册表中的信息得到的, - 使用Qt中的定时器来每个3s读取一次注册表

串口通信方面:通过使用Qt的封装的QSerialPort来实现

main.cpp

  1. #include "mainwindow.h"
  2. #include <QApplication>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. MainWindow w;
  8. w.show();
  9.  
  10. return a.exec();
  11. }

mainwindow.h

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3.  
  4. #include <QMainWindow>
  5. #include <QSerialPort>
  6. #include <QTimer>
  7.  
  8. namespace Ui {
  9. class MainWindow;
  10. }
  11.  
  12. class MainWindow : public QMainWindow
  13. {
  14. Q_OBJECT
  15.  
  16. public:
  17. explicit MainWindow(QWidget *parent = nullptr);
  18. ~MainWindow();
  19. /*
  20. * 功能:获取电脑中串口的端口
  21. * 参数:无
  22. * 返回值:无
  23. */
  24. void Get_Serial_Port(void);
  25. /*
  26. * 功能:当串口有数据的时候执行
  27. * 参数:无
  28. * 返回值:无
  29. */
  30. void readData(void);
  31. /*
  32. * 功能:每个3s执行的任务
  33. * 参数:无
  34. * 返回值:无
  35. */
  36. void myThread(void);
  37.  
  38. private slots:
  39. /*
  40. * 功能:点击pushButton按钮功能
  41. * 参数:无
  42. * 返回值:无
  43. */
  44. void on_pushButton_clicked();
  45. /*
  46. * 功能:点击清空按钮功能,清空显示区的显示
  47. * 参数:无
  48. * 返回值:无
  49. */
  50. void on_pushButton_2_clicked();
  51.  
  52. void on_pushButton_3_clicked();
  53.  
  54. void on_pushButton_4_clicked();
  55.  
  56. void on_pushButton_5_clicked();
  57.  
  58. private:
  59. Ui::MainWindow *ui;
  60. //串口类指针
  61. QSerialPort *Serial;
  62. //时间类指针
  63. QTimer *time;
  64. };
  65.  
  66. #endif // MAINWINDOW_H

mainwindow.cpp

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "windows.h"
  4. #include "QVector"
  5. #include "QDebug"
  6. #include "stdio.h"
  7. #include "QMessageBox"
  8. #include <stdlib.h>
  9.  
  10. #define MAX_KEY_LENGTH 255
  11. #define MAX_VALUE_NAME 16383
  12.  
  13. /*
  14. * 功能:读取注册表下的子项
  15. * 参数:hkey:注册表的根
  16. * lpSubkey:注册表根下的路径
  17. * retArray:返回要查找的路径下的值的数组
  18. * 返回值:无
  19. */
  20. static void Get_Regedit(HKEY hkey,LPCSTR lpSubKey,QVector<QString> &retArray);
  21.  
  22. MainWindow::MainWindow(QWidget *parent) :
  23. QMainWindow(parent),
  24. ui(new Ui::MainWindow)
  25. {
  26. ui->setupUi(this);
  27. //时间类初始化
  28. time = new QTimer(this);
  29. connect(time,&QTimer::timeout,this,&MainWindow::myThread);
  30. time->start();
  31. //状态栏显示
  32. ui->statusBar->showMessage("程序运行中...");
  33. //初始化串口的显示
  34. this->Get_Serial_Port();
  35. QStringList temp;
  36. //波特率的显示
  37. temp << "" << "" << "" << "" << "" << "";
  38. ui->comboBox_2->addItems(temp);
  39. //数据位的显示
  40. temp.clear();
  41. temp << "" << "" << "" << "";
  42. ui->comboBox_3->addItems(temp);
  43. //奇偶检验位的显示
  44. temp.clear();
  45. temp << "" << "" << "";
  46. ui->comboBox_4->addItems(temp);
  47. //停止位的显示
  48. temp.clear();
  49. temp << "" << "1.5" << "";
  50. ui->comboBox_5->addItems(temp);
  51.  
  52. this->Serial = new QSerialPort(nullptr);
  53. }
  54.  
  55. MainWindow::~MainWindow()
  56. {
  57. delete ui;
  58. }
  59. /*
  60. * 功能:获取电脑中串口的端口
  61. * 参数:无
  62. * 返回值:无
  63. */
  64. void MainWindow::Get_Serial_Port()
  65. {
  66. QVector<QString> retArray;
  67. ui->comboBox->clear();
  68. Get_Regedit(HKEY_LOCAL_MACHINE,\
  69. "HARDWARE\\DEVICEMAP\\SERIALCOMM",\
  70. retArray);
  71.  
  72. qDebug() << retArray.size();
  73.  
  74. QVector<QString>::iterator iter;
  75. for (iter=retArray.begin();iter!=retArray.end();iter++)
  76. {
  77. qDebug() << *iter << "\0";
  78. ui->comboBox->addItem(*iter);
  79. }
  80. }
  81. /*
  82. * 功能:点击pushButton按钮功能,打开串口
  83. * 参数:无
  84. * 返回值:无
  85. */
  86. void MainWindow::on_pushButton_clicked()
  87. {
  88. if(!Serial->isOpen())
  89. {
  90. qDebug() << ui->comboBox->currentText();
  91. //设置串口的端口名称
  92. Serial->setPortName(ui->comboBox->currentText());
  93. //toInt:将字符串转换为数字
  94. //设置串口的波特率
  95. Serial->setBaudRate((ui->comboBox_2->currentText()).toInt(nullptr,));
  96. //设置串口的数据位
  97. Serial->setDataBits((QSerialPort::DataBits((ui->comboBox_3->currentText()).toInt(nullptr,))));
  98. //设置串口的奇偶校验位
  99. Serial->setParity(QSerialPort::Parity((ui->comboBox_4->currentText()).toInt(nullptr,)));
  100. //设置串口的停止位
  101. Serial->setStopBits(QSerialPort::StopBits((ui->comboBox_5->currentText()).toInt(nullptr,)));
  102. //设置串口的流
  103. Serial->setFlowControl(QSerialPort::NoFlowControl);
  104. BOOL isSerial = Serial->open(QIODevice::ReadWrite);
  105. if(!isSerial)
  106. {
  107. qDebug() << "串口打开错误!";
  108. return;
  109. }
  110. //创建一个信号与槽,使得串口有数据可以读取的时候可以执行readData()函数
  111. connect(Serial,&QSerialPort::readyRead,this,&MainWindow::readData);
  112. ui->pushButton->setText("已启动");
  113. }
  114. else
  115. {
  116. ui->pushButton->setText("启动");
  117. Serial->close();
  118. }
  119.  
  120. }
  121.  
  122. /*
  123. * 功能:读取注册表下的子项
  124. * 参数:hkey:注册表的根
  125. * lpSubkey:注册表根下的路径
  126. * retArray:返回要查找的路径下的值的数组
  127. * 返回值:无
  128. */
  129. static void Get_Regedit(HKEY hkey,LPCSTR lpSubKey,QVector<QString> &retArray)
  130. {
  131. HKEY phkey = nullptr;
  132. BOOL isSuccess = false;
  133. /*
  134. * 功能:打开注册表,返回值为是否打开成功
  135. */
  136. isSuccess = RegOpenKeyA(hkey,lpSubKey,&phkey);
  137. if(isSuccess != ERROR_SUCCESS)
  138. {
  139. qDebug() << "注册表打开失败!";
  140. return;
  141. }
  142. qDebug() << "注册表打开成功!";
  143. /*
  144. * 功能:读取注册表下的子项
  145. */
  146. DWORD i =;
  147. LSTATUS retCode = ERROR_SUCCESS;
  148.  
  149. CHAR achValue[MAX_VALUE_NAME];
  150. DWORD cchValue = MAX_VALUE_NAME;
  151. BYTE Data[MAX_VALUE_NAME];
  152. DWORD cbData = MAX_VALUE_NAME;
  153. do
  154. {
  155. cchValue = MAX_VALUE_NAME;
  156. cbData = MAX_VALUE_NAME;
  157. achValue[] = '\0';
  158. Data[] = '\0';
  159. QString temp = "";
  160. retCode = RegEnumValueA(phkey, i,achValue,&cchValue,nullptr,nullptr,Data,&cbData);
  161.  
  162. if (retCode == ERROR_SUCCESS && achValue[] != '\0')
  163. {
  164. qDebug() << i++ << achValue << " ";
  165. BYTE j = ;
  166. while(Data[j] != '\0')
  167. temp += (CHAR)(Data[j++]);
  168. qDebug() << temp;
  169. retArray.append(temp);
  170. }
  171. }while(achValue[] != '\0');
  172. /*
  173. * 功能:关闭注册表,返回值为是否打开成功
  174. */
  175. isSuccess = RegCloseKey(phkey);
  176. if(isSuccess != ERROR_SUCCESS)
  177. {
  178. qDebug() << "注册表关闭失败!";
  179. return;
  180. }
  181. qDebug() << "注册表关闭成功!";
  182. return;
  183. }
  184.  
  185. /*
  186. * 功能:点击清空按钮功能,清空显示区的显示
  187. * 参数:无
  188. * 返回值:无
  189. */
  190. void MainWindow::on_pushButton_2_clicked()
  191. {
  192. ui->textBrowser->setText("");
  193. }
  194.  
  195. /*
  196. * 功能:当串口有数据的时候执行,在显示区域显示
  197. * 串口接受到的值
  198. * 参数:无
  199. * 返回值:无
  200. */
  201. void MainWindow::readData(void)
  202. {
  203. //是否选择了该按钮,选择以16进制进行输出
  204. if(ui->radioButton->isChecked())
  205. {
  206. QByteArray temp = Serial->readAll().toHex();
  207. for(int i = ;i < temp.length();++i)
  208. {
  209. //在16进制开始加入"0x"
  210. if(i % == )
  211. ui->textBrowser->insertPlainText("0x");
  212. ui->textBrowser->insertPlainText((QString)temp.at(i));
  213. //在16进制结束加上空格" "
  214. if(i % == )
  215. ui->textBrowser->insertPlainText(" ");
  216. }
  217. }
  218. //没有选择则按照ASCII码输出
  219. else
  220. ui->textBrowser->insertPlainText(Serial->readAll());
  221. ui->textBrowser->moveCursor(QTextCursor::End);
  222. }
  223. /*
  224. * 功能:向串口中发送数据
  225. * 参数:无
  226. * 返回值:无
  227. */
  228. void MainWindow::on_pushButton_3_clicked()
  229. {
  230. //判断串口是否处于打开状态
  231. if(Serial->isOpen())
  232. {
  233. QByteArray temp = ui->textEdit->toPlainText().toUtf8();
  234. qDebug() << temp;
  235. Serial->write(temp);
  236. }
  237. else
  238. {
  239. //串口没有连接的时候发送数据就会出错
  240. QMessageBox messageBox(QMessageBox::Icon(),"警告","串口未连接",QMessageBox::Yes,nullptr);
  241. messageBox.exec();
  242. }
  243. }
  244. /*
  245. * 功能:清空发送区
  246. * 参数:无
  247. * 返回值:无
  248. */
  249. void MainWindow::on_pushButton_4_clicked()
  250. {
  251. ui->textEdit->clear();
  252. }
  253. /*
  254. * 功能:退出程序
  255. * 参数:无
  256. * 返回值:无
  257. */
  258. void MainWindow::on_pushButton_5_clicked()
  259. {
  260. if(Serial->isOpen())
  261. Serial->close();
  262. this->close();
  263. }
  264. /*
  265. * 功能:每个3s执行的任务,判断端口和串口是否打开
  266. * 参数:无
  267. * 返回值:无
  268. */
  269. void MainWindow::myThread()
  270. {
  271. qDebug() << "线程OK ";
  272. if(Serial->isReadable())
  273. ui->pushButton->setText("已启动");
  274. else
  275. ui->pushButton->setText("启动");
  276. this->Get_Serial_Port();
  277. }

mainwindow.ui

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ui version="4.0">
  3. <class>MainWindow</class>
  4. <widget class="QMainWindow" name="MainWindow">
  5. <property name="geometry">
  6. <rect>
  7. <x>0</x>
  8. <y>0</y>
  9. <width>768</width>
  10. <height>500</height>
  11. </rect>
  12. </property>
  13. <property name="minimumSize">
  14. <size>
  15. <width>768</width>
  16. <height>500</height>
  17. </size>
  18. </property>
  19. <property name="maximumSize">
  20. <size>
  21. <width>768</width>
  22. <height>500</height>
  23. </size>
  24. </property>
  25. <property name="windowTitle">
  26. <string>串口助手</string>
  27. </property>
  28. <widget class="QWidget" name="centralWidget">
  29. <widget class="QPushButton" name="pushButton">
  30. <property name="geometry">
  31. <rect>
  32. <x>20</x>
  33. <y>230</y>
  34. <width>93</width>
  35. <height>28</height>
  36. </rect>
  37. </property>
  38. <property name="text">
  39. <string>启动</string>
  40. </property>
  41. </widget>
  42. <widget class="QPushButton" name="pushButton_2">
  43. <property name="geometry">
  44. <rect>
  45. <x>120</x>
  46. <y>290</y>
  47. <width>93</width>
  48. <height>28</height>
  49. </rect>
  50. </property>
  51. <property name="text">
  52. <string>清空显示</string>
  53. </property>
  54. </widget>
  55. <widget class="QComboBox" name="comboBox">
  56. <property name="geometry">
  57. <rect>
  58. <x>120</x>
  59. <y>50</y>
  60. <width>87</width>
  61. <height>22</height>
  62. </rect>
  63. </property>
  64. </widget>
  65. <widget class="QComboBox" name="comboBox_2">
  66. <property name="geometry">
  67. <rect>
  68. <x>120</x>
  69. <y>80</y>
  70. <width>87</width>
  71. <height>22</height>
  72. </rect>
  73. </property>
  74. </widget>
  75. <widget class="QComboBox" name="comboBox_3">
  76. <property name="geometry">
  77. <rect>
  78. <x>120</x>
  79. <y>110</y>
  80. <width>87</width>
  81. <height>22</height>
  82. </rect>
  83. </property>
  84. </widget>
  85. <widget class="QComboBox" name="comboBox_4">
  86. <property name="geometry">
  87. <rect>
  88. <x>120</x>
  89. <y>140</y>
  90. <width>87</width>
  91. <height>22</height>
  92. </rect>
  93. </property>
  94. </widget>
  95. <widget class="QComboBox" name="comboBox_5">
  96. <property name="geometry">
  97. <rect>
  98. <x>120</x>
  99. <y>170</y>
  100. <width>87</width>
  101. <height>22</height>
  102. </rect>
  103. </property>
  104. </widget>
  105. <widget class="QRadioButton" name="radioButton">
  106. <property name="geometry">
  107. <rect>
  108. <x>0</x>
  109. <y>295</y>
  110. <width>115</width>
  111. <height>19</height>
  112. </rect>
  113. </property>
  114. <property name="text">
  115. <string>以16进制输出</string>
  116. </property>
  117. </widget>
  118. <widget class="QPushButton" name="pushButton_3">
  119. <property name="geometry">
  120. <rect>
  121. <x>120</x>
  122. <y>360</y>
  123. <width>93</width>
  124. <height>28</height>
  125. </rect>
  126. </property>
  127. <property name="text">
  128. <string>发送</string>
  129. </property>
  130. </widget>
  131. <widget class="QGroupBox" name="groupBox">
  132. <property name="geometry">
  133. <rect>
  134. <x>230</x>
  135. <y>4</y>
  136. <width>551</width>
  137. <height>331</height>
  138. </rect>
  139. </property>
  140. <property name="title">
  141. <string>接受显示区</string>
  142. </property>
  143. <widget class="QTextBrowser" name="textBrowser">
  144. <property name="geometry">
  145. <rect>
  146. <x>10</x>
  147. <y>20</y>
  148. <width>521</width>
  149. <height>301</height>
  150. </rect>
  151. </property>
  152. </widget>
  153. </widget>
  154. <widget class="QGroupBox" name="groupBox_2">
  155. <property name="geometry">
  156. <rect>
  157. <x>230</x>
  158. <y>340</y>
  159. <width>541</width>
  160. <height>121</height>
  161. </rect>
  162. </property>
  163. <property name="title">
  164. <string>发送显示区</string>
  165. </property>
  166. <widget class="QTextEdit" name="textEdit">
  167. <property name="geometry">
  168. <rect>
  169. <x>10</x>
  170. <y>20</y>
  171. <width>521</width>
  172. <height>91</height>
  173. </rect>
  174. </property>
  175. </widget>
  176. </widget>
  177. <widget class="QPushButton" name="pushButton_4">
  178. <property name="geometry">
  179. <rect>
  180. <x>120</x>
  181. <y>400</y>
  182. <width>93</width>
  183. <height>28</height>
  184. </rect>
  185. </property>
  186. <property name="text">
  187. <string>清空发送</string>
  188. </property>
  189. </widget>
  190. <widget class="QLabel" name="label">
  191. <property name="geometry">
  192. <rect>
  193. <x>20</x>
  194. <y>50</y>
  195. <width>71</width>
  196. <height>21</height>
  197. </rect>
  198. </property>
  199. <property name="text">
  200. <string>串口端口</string>
  201. </property>
  202. </widget>
  203. <widget class="QLabel" name="label_2">
  204. <property name="geometry">
  205. <rect>
  206. <x>20</x>
  207. <y>83</y>
  208. <width>80</width>
  209. <height>15</height>
  210. </rect>
  211. </property>
  212. <property name="text">
  213. <string>串口波特率</string>
  214. </property>
  215. </widget>
  216. <widget class="QLabel" name="label_3">
  217. <property name="geometry">
  218. <rect>
  219. <x>20</x>
  220. <y>113</y>
  221. <width>80</width>
  222. <height>15</height>
  223. </rect>
  224. </property>
  225. <property name="text">
  226. <string>串口数据位</string>
  227. </property>
  228. </widget>
  229. <widget class="QLabel" name="label_4">
  230. <property name="geometry">
  231. <rect>
  232. <x>20</x>
  233. <y>143</y>
  234. <width>80</width>
  235. <height>15</height>
  236. </rect>
  237. </property>
  238. <property name="text">
  239. <string>串口校验位</string>
  240. </property>
  241. </widget>
  242. <widget class="QLabel" name="label_5">
  243. <property name="geometry">
  244. <rect>
  245. <x>20</x>
  246. <y>173</y>
  247. <width>80</width>
  248. <height>15</height>
  249. </rect>
  250. </property>
  251. <property name="text">
  252. <string>串口停止位</string>
  253. </property>
  254. </widget>
  255. <widget class="QLabel" name="label_6">
  256. <property name="geometry">
  257. <rect>
  258. <x>25</x>
  259. <y>5</y>
  260. <width>191</width>
  261. <height>41</height>
  262. </rect>
  263. </property>
  264. <property name="font">
  265. <font>
  266. <family>楷体</family>
  267. <pointsize>12</pointsize>
  268. </font>
  269. </property>
  270. <property name="text">
  271. <string>欢迎使用调试助手</string>
  272. </property>
  273. </widget>
  274. <widget class="QPushButton" name="pushButton_5">
  275. <property name="geometry">
  276. <rect>
  277. <x>120</x>
  278. <y>230</y>
  279. <width>93</width>
  280. <height>28</height>
  281. </rect>
  282. </property>
  283. <property name="text">
  284. <string>退出</string>
  285. </property>
  286. </widget>
  287. </widget>
  288. <widget class="QStatusBar" name="statusBar"/>
  289. <widget class="QMenuBar" name="menuBar">
  290. <property name="geometry">
  291. <rect>
  292. <x>0</x>
  293. <y>0</y>
  294. <width>768</width>
  295. <height>26</height>
  296. </rect>
  297. </property>
  298. <widget class="QMenu" name="menu">
  299. <property name="title">
  300. <string>菜单</string>
  301. </property>
  302. <addaction name="separator"/>
  303. <addaction name="actiondsa"/>
  304. </widget>
  305. <widget class="QMenu" name="menu_2">
  306. <property name="title">
  307. <string>帮助</string>
  308. </property>
  309. </widget>
  310. <addaction name="menu"/>
  311. <addaction name="menu_2"/>
  312. </widget>
  313. <widget class="QToolBar" name="toolBar">
  314. <property name="windowTitle">
  315. <string>toolBar</string>
  316. </property>
  317. <attribute name="toolBarArea">
  318. <enum>TopToolBarArea</enum>
  319. </attribute>
  320. <attribute name="toolBarBreak">
  321. <bool>false</bool>
  322. </attribute>
  323. </widget>
  324. <action name="actiondsa">
  325. <property name="text">
  326. <string>退出</string>
  327. </property>
  328. </action>
  329. </widget>
  330. <layoutdefault spacing="6" margin="11"/>
  331. <resources/>
  332. <connections/>
  333. </ui>

界面的实际效果为:

串口调试助手--Qt的更多相关文章

  1. Ubuntu Linux TinySerial串口调试助手 可视化界面 安装使用

    ubuntu Linux下串口调试助手使用 Tiny Serial为一个开源项目,欢迎大家使用,基于Qt开发的串口调试助手,有一般串口助手的基本功能,更多功能正在完善. Github地址:https: ...

  2. 问题解决——使用串口调试助手发送控制字符 协议指令 <ESC>!?

    外行指挥内行的结果就是,你必须按照他想的去做,等做不出来再用自己的办法,而且必须如此. -------------------------------------------------------- ...

  3. USB转串口连接线与串口调试助手的使用

    ---作者吴疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:宇泰UT-890 ...

  4. 串口调试助手---VB源码

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  5. 基于串口调试助手的WIFI模块调试-FPGA简单联网(点灯)

    根据正点原子的<ATK-ESP8266 WIFI用户手册>,使用XCOM V2.2串口调试助手测试WIFI模块[26].在本系统中运用到的功能主要是TCP/IP模式中的TCP Client ...

  6. 基于开源串口调试助手修改的qcom

    代码已上传码云: https://gitee.com/fensnote/qcom.git 源代码用于串口编程的学习很有价值,谢谢Qter的开源项目,感谢花心萝卜工作室的修改版本. 开源的qt开发的串口 ...

  7. 11-51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接TCP服务器,用串口调试助手和手机TCP调试助手测试)

    写完题目刚想起来一件事情,如果手机作为客户端(不连接路由器的情况下),手机连接模块的无线会分配一个IP地址,,,这个IP地址事先我也不知道....我先看看AT指令里面有没有一个指令可以打印一下连接自己 ...

  8. 4-51单片机ESP8266学习-AT指令(测试TCP服务器--使用串口调试助手--不连接路由器)

    上一篇连接  http://www.cnblogs.com/yangfengwu/p/8757513.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXN ...

  9. C# 串口调试助手源码

    本方法,禁用跨进程错误(做法不太好,但是对于单片机出身的人来说,好理解,能用就行). 基本功能: 1.点串口号的下拉菜单自动当前检索设备管理器的COM 2.发送模式可选,hex和string两种 3. ...

随机推荐

  1. vscode搭建springboot开发环境

    1. JDK,Maven 1.1 下载略 1.2 设置系统环境变量 jdk增加环境变量JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191(安装路径) 增加路径Pa ...

  2. Linux下vim卡死原因

    使用vim的时候,偶尔会碰到vim莫名其妙的僵在那里. 解决方案: 经查,原来Ctrl+S在Linux里是锁定屏幕的快捷键,如果要解锁,按下Ctrl+Q就可以了. 经验总结: 牢记这两个VIM组合键 ...

  3. js对元素判断

    $("input[type='text']").attr("readonly","readonly"); $("textarea& ...

  4. Java的反射是什么?有什么用?

    首先我要简单的来说一下什么是Java的反射机制: 在Java里面一个类有两种状态--编译和运行状态,通常我们需要获取这个类的信息都是在编译阶段获得的,也就是直接点出来或者new出来,可是如果需要在类运 ...

  5. SQL按照顺序时间段统计

    借助master..spt_values表 按照时间(半小时)划分统计时间段: select ,dateInfo.dday) as time) StartTime, ,),dateInfo.dday) ...

  6. JavaWeb基础知识

    一.WEB基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web ...

  7. LTDC/DMA2D——液晶显示

    1.显示器的基本参数 (1) 像素像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点. (2) 分辨率一些嵌入式设备的显示器常常以“行像素值 x列像素值”表示屏幕的分辨率.如分辨率 800x ...

  8. 项目管理工具-OmniPlan 3 for Mac

    链接:https://pan.baidu.com/s/1tp_37fHXHwJuklL1nNSwig  密码:l0sf 激活迷药(里面自带的keygen不能用,用这个好使): Name: Appked ...

  9. 超详细Qt5.9.5移植攻略

    本文就来介绍下如何将Qt5.9.5移植到ARM开发板上. 以imx6开发板为例,使用Ubuntu14.04虚拟机作为移植环境. 准备工作 1.主机环境:Ubuntu14.04: 开发板:启扬IAC-I ...

  10. Django开发简单采集用户浏览器信息的小功能

    Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...