Ubuntu下图形界面串口工具CuteCom的安装和升级
串口的图形界面化工具在Windows下很多, 但是在Linux下可选择的就很少, CuteCom 是相对比较好用的一款了. Ubuntu20.04默认安装的是0.30.3, 这是一个比较早的版本, 最新的版本是0.51.0, 如果需要自定义RTS电平高低, 例如连接W801这样RESET连接了RTS的开发板, 就需要升级到最新版.
安装和更新到最新版本

默认安装
在Ubuntu下使用apt可以直接安装
sudo apt install cutecom
这样安装的是0.30.3版本
CuteCom的项目地址
如果需要使用最新版本, 需要自行编译
- 最初在Sourceforge: http://cutecom.sourceforge.net/ 版本最高到0.22.0
- 后来迁移到了Github: https://github.com/neundorf/CuteCom
- 2018-08-22, 迁移到了Gitlab: https://gitlab.com/cutecom/cutecom/
现在最新的代码在Gitlab, 当前版本为0.51.0
环境准备
CuteCom并未提供预编译的安装包, 所以需要自己本地编译, 本地编译需要安装Qt的开发环境
apt install apt-transport-https git dh-make build-essential autoconf autotools-dev qt5-default libssl-dev qt5keychain-dev devscripts
因为CuteCom用到了Qtserial, 所以还需要安装
apt install libqt5serialport5-dev
Ubuntu22.04
sudo apt install qtbase5-dev qt5-qmake cmake dh-make build-essential autoconf autotools-dev libqt5serialport5-dev
下载和编译
git clone https://gitlab.com/cutecom/cutecom.git
cd cuteCom
cmake .
make
编译完成后在同一目录下, 可以看到cutecom的可执行文件
替换本机安装的CuteCom
# 确认cutecom的位置
whereis cutecom
# 本例是在/usr/bin
cd /usr/bin
mv cutecom cutecom.0.30.3
mv ~/cutecom/cutecom .
对于使用Qt Creator的用户, 在cmake之前, Qt Creator不能直接编译Cutecom项目, 在cmake之后, Qt Creator就可以在IDE里直接编译了.
新版本中的RTS控制功能
在设置中, 如果选择了Flow Control为NONE, 在面板上会增加两个勾选框选项: RTS和DTR. 使用中, 勾选RTS会拉低电平, 不勾选则会使RTS保持低电平, 在连接W801开发板时, 需要取消勾选. 如果在W801开发板上已经给RESET和GND之间加焊了电容, 可以在开发板运行中打开和关闭串口而不会导致开发板重启.
在连接状态中, 可以通过勾选/取消勾选实时控制RTS的电平状态.
Cutecom的代码解读
CuteCom的是比较标准的Qt项目
项目文件 CuteCom.pro
项目文件中定义了项目包含的.cpp, .h文件, .ui后缀的界面文件, 资源文件resources.qrc
DISTFILES设置的是qt.astylerc, 这个似乎是代码格式插件Artistic Style的配置
启动入口 main.cpp
这里设置程序名称, 可以看到已经使用了QCoreApplication::translate(, 可以支持多国化, 但是现在还没有其它语言的资源
然后就是初始化MainWindow, show()启动
主窗口 mainwindow.cpp 和 mainwindow.h
- 主界面在mainwidnow.ui中定义, 最外层使用的是
QMainWindow控件 - 主界面上需要包含的元素, 其它的界面元素类, 在mainwindow.h中声明, 在mainwindow.cpp中创建并加入到对应的QWidget中
- mainwindow.cpp 通过 mainwindows.h 关联ui ui_mainwindow.h
- ui_mainwindow.h 是由ui文件生成的, 其中不仅声明了界面元素, 还定义了 setupUi() 方法, 里面有具体的界面展示实现, 以及 retranslateUi() 方法, 用于对界面元素的多国化展示
- setupUi() 在 mainwindow.cpp 的构建方法中调用.
MainWindow::MainWindow(QWidget *parent, const QString &session)
: QMainWindow(parent)
, m_device(new QSerialPort(this))
, m_deviceState(DEVICE_CLOSED)
, m_progress(nullptr)
, m_sz(nullptr)
, m_previousChar('\0')
, m_command_history_model(nullptr)
, m_ctrlCharactersPopup(nullptr)
, m_keyRepeatTimer(this)
, m_keyCode('\0')
, m_cmdBufIndex(0)
, m_reconnectTimer(this)
{
QCoreApplication::setOrganizationName(QStringLiteral("CuteCom"));
// setting it to CuteCom5 will prevent the original CuteCom's settings file
// to be overwritten
QCoreApplication::setApplicationName(QStringLiteral("CuteCom5"));
QCoreApplication::setApplicationVersion(QStringLiteral("%1").arg(CuteCom_VERSION));
// qRegisterMetaType<Settings::LineTerminator>();
setupUi(this);
m_bt_sendfile->setEnabled(false);
m_command_history->setEnabled(false);
m_command_history->setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection);
m_lb_logfile->setStyleSheet(" QLabel:hover{color: blue;} ");
...
- retranslateUi() 方法未被调用
- 在 qmainwindow.h 中, 使用
QT_CONFIG()宏定义根据编译环境的Qt是否包含某个特性而加入对应的声明, 不需要开发者关心
/*
The QT_CONFIG macro implements a safe compile time check for features of Qt.
Features can be in three states:
0 or undefined: This will lead to a compile error when testing for it
-1: The feature is not available
1: The feature is available
*/
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)
- 加入ControlPanel
controlPanel = new ControlPanel(this->centralWidget(), m_settings);
- 加入状态栏的方式和ControlPanel的方式不一样
// setup status bar with initial infromation
m_device_statusbar = new StatusBar(this);
m_device_statusbar->sessionChanged(m_settings->getCurrentSession());
this->statusBar()->addWidget(m_device_statusbar);
mainwindow 中的用户动作, 一部分是通过 connect() 实现关联, 另一部分是通过 eventFilter(), 通过控件的 installEventFilter() 方法, 将 eventFilter() 中定义的逻辑关联到当前控件上.
mainwindow 中, 使用 signal 关联 controlpanl 传递来的连接/关闭串口的操作, 调用当前类下的连接/关闭方法
connect(controlPanel, &ControlPanel::openDeviceClicked, this, &MainWindow::openDevice);
connect(controlPanel, &ControlPanel::closeDeviceClicked, this, &MainWindow::closeDevice);
对RTS和DTR的控制
- 处理方法为
void MainWindow::setRTSLineState(int checked), 这个方法里面的m_device就是一个QSerialPort设备, 对应的setRequestToSend(true)方法会将RTS电平拉低(有些硬件的电平是相反的)
void MainWindow::setRTSLineState(int checked)
{
if ((nullptr != m_device) && (true == m_device->isOpen())) {
if (Qt::CheckState::Checked == static_cast<Qt::CheckState>(checked)) {
m_device->setRequestToSend(true);
} else {
m_device->setRequestToSend(false);
}
}
}
- 消息绑定在mainwindow.cpp里,
connect(controlPanel->m_rts_line, &QCheckBox::stateChanged, this, &MainWindow::setRTSLineState);
Settings控制面板的收起和打开
- 信号关联
connect(m_panel_settings, &QTabWidget::tabBarClicked, this, &ControlPanel::tabClicked); - 对应的
tabClicked是在controlpanel.h中定义的
// slots
void tabClicked(int i)
{
Q_UNUSED(i);
toggleMenu();
}
- 在
toogleMenu()方法里实现了控制面板的收起和打开
void ControlPanel::toggleMenu()
{
// Create animation
QPropertyAnimation *animation = new QPropertyAnimation(this, "pos");
QPoint endPos = m_menuVisible ? QPoint(m_x, m_y) : QPoint(m_x, -13);
// qDebug() << m_menuVisible << endPos;
animation->setStartValue(pos());
animation->setEndValue(endPos);
animation->start();
if (m_menuVisible) {
m_panel_settings->setTabIcon(0, showIcon);
m_menuVisible = false;
} else {
m_panel_settings->setTabIcon(0, hideIcon);
m_menuVisible = true;
m_combo_Baud->setFocus();
}
}
问题
如果使用Ubuntu20.04自带的qt库(5.12.x版本)编译, 控制面板界面的那些输入和下拉控件高度在HDPI屏幕下会特别小, 如果使用Qt Creator的qt库(5.14.x版本)编译, 这个高度就是正常的.
Ubuntu下图形界面串口工具CuteCom的安装和升级的更多相关文章
- ubuntu下可用的串口调试工具--cutecom
今天在ubuntu下要用到串口发送16进制数据,百度了很多工具,觉得minicom和cutecom都不错,比较直观是cutecom,所以就介绍下cutecom. 安装: 输入 $ sudo apt-g ...
- SSDB图形界面管理工具:phpssdbadmin安装部署
环境: 14.04.1-Ubuntu 1.安装Nginx apt-get install nginx ubantu安装完Nginx后,文件结构大致为: 所有的配置文件都在 /etc/nginx下: 启 ...
- Windows Azure Storage图形界面管理工具
上一篇我们介绍了用PowerShell将Windows Azure的存储服务当网盘来使用.如果感觉还不够简单,那么这次我们来看看还有哪些使用起来更方便的图形界面管理工具吧.当然,这些工具必要支持中国版 ...
- redis的图形界面管理工具:phpredisadmin
大部分人都知道redis是一款用在缓存服务器上的软件,它与memcache类似,都可以存储海量的数据,用在大访问量的web网站.聊天记录存放等方面,但是又与memcache不同: 1.缓存数据可以持久 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- Cordova - Windows版本图形界面管理工具,告别命令行输入方式!
Cordova本身提供的是命令行管理工具,并没有提供图形界面管理工具,虽然命令行管理工具可以完成所有Cordova管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- redis的图形界面管理工具
大部分人都知道redis是一款用在缓存服务器上的软件,它与memcache类似,都可以存储海量的数据,用在大访问量的web网站.聊天记录存放等方面,但是又与memcache不同: 1.缓存数据可以持久 ...
- 10款最好用的MySQL数据库客户端图形界面管理工具
MySQL Workbench 该工具由MySQL开发,是一个跨平台的可视化数据库设计工具.它是DBDesigner4项目备受期待的替代者,它是一个本地图形化工具,支持的操作系统包括Windows.L ...
- 使用图形界面管理工具Navicat for MySQL连接Mysql数据库时提示错误:Can't connect to MySQL server (10060)
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...
随机推荐
- [转帖]top指令如何查询指定用户的所有进程?
有两种方法. 1.top指令与字符串查询指令通过通道配合查询. 指令: "-d 5"指的是每五秒刷新一次进程列表,"grep"是字符串查询指令,它可以将含 ...
- [转帖]从SSTable到LSM-Tree之二
https://zhuanlan.zhihu.com/p/103968892 背景 LSM-Tree (Log Structured Merge Tree),日志结构合并树.它在 1996 年由论文& ...
- [转帖]s3对象存储挂载到本地文件夹
https://www.zhangzhuo.ltd/articles/2021/10/22/1634888049032.html 一.s3fs工具 s3fs-fuse 是一个采用 c++ 开发的开源应 ...
- [转帖]SQL Server超过了每行的最大字节数(8060)的原因和解决办法
一.现象 出现这种错误都发生在SQL语句建表时,错误提示: "警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060).如果结果行长度超过 806 ...
- [转帖]神秘的backlog参数与TCP连接队列
https://www.cnblogs.com/codelogs/p/16060820.html 简介# 这要从一次压测项目说起,那是我们公司的系统与另几家同行公司的系统做性能比拼,性能数据会直接影响 ...
- 【转帖】让互联网更快:新一代QUIC协议在腾讯的技术实践分享
https://www.cnblogs.com/jb2011/p/8458549.html 本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况 ...
- [转帖]DISK BUSY的理解误区
前几天有个客户的系统存在性能问题,从AWR报告上我们看到是CPU使用率过高,同时GLOBAL CACHE方面的争用比较严重.系统中的烂SQL很多,数据库中很多几十GB的大表也没有分区,总之问题很多.不 ...
- [转帖]龙芯 vs 飞腾:各种测试数据看国产CPU水平
https://zhuanlan.zhihu.com/p/99921594 2019年年末,龙芯.飞腾两大国产CPU巨头更是相继组织了规模宏大的年会,发布了新型桌面芯片及其整机产品,顿时硝烟四起.各大 ...
- OpenEuler2203使用rpm方式安装Oracle19c的过程
OpenEuler2203使用rpm方式安装Oracle19c的过程 安装介质 oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm oracle-d ...
- Linux 开启防火墙 避免非干系人误操作的处理
公司里面进行系统集成测试. 不想让开发能够更改我的服务器信息, 但是改密码又太麻烦了. 想了想还是用 防火墙好一些. 第一步 开启防火墙 systemctl enable firewalld syst ...