Qt 实现串口终端(连接Terminal)

2 篇文章 0 订阅
2 篇文章 0 订阅

1. Qt QMenuBar和QMenu以及QAction巧妙的使用方法

这里简单介绍QMenuBar和QMenu以及QAction是什么,其详细功能本文不做介绍,如果还不了解的朋友可以查阅Qt的帮助手册或浏览其它相关博客。如下图,软件中蓝色条框是QMenuBar用来承载QMenu,红色条框中“文件、编辑、构建……”为QMenu,而每个QMenu点击展开的粉色框内所有可以看到的均为QAction,而点击粉色框内所产生的动作即是绑定在对应QAction的槽函数(对应信号为QAction::triggered())。
在这里插入图片描述
他们之间的关系用框图表示大概像这样子(原谅我的画图水平),一个QMenuBar可以有多个QMenu,一个QMenu可以有多个QAction,每个QAction可以对应多个类成员函数(图中只画出了对应一个函数的情况)。

在这里插入图片描述
OK,简单的介绍到这里就结束了,接下来进入正文。QMenuBar虽然好用,但是也有一定的缺陷,它不能像Map、Vector、List等容器一样可以查找并返回自己的“子节点”。写这篇文章的目的,第一是为了解决QMenuBar没有准确定位其中某一个QMenu或QAction的函数接口;第二是做一下笔记,怕自己忘记。废话不多说了,直接贴代码。

1、代码关键片段

头文件UartToolsMainWindow.h有关QMenuBar的关键部分代码。

//UartToolsMainWindow.h

class UartToolsMainWindow;

typedef struct {
    QAction * action;
    QString name;
    void (UartToolsMainWindow::*func) ();
} MainMenuAction;

typedef struct {
    QMenu * menu;
    QString name;
    QList<main_menu_action> actionsList;
} MainMenuModule;

class UartToolsMainWindow: public QWidget
{
    Q_OBJECT
    ......
    ......
    ......
private:    
//---------------------------Member--------------------------
//Menu bar
    QMenuBar * mainWindowMenubar;
    QList<main_menu> mainWindowMenuList;
//---------------------------Functions------------------------
//Init menu bar
    void InitMenubar(void);
    void NewActionToMenu(MainMenuModule*menu, QString actName, void (UartToolsMainWindow::*func) (void));
    
//Menu bar action funcs
	void ShowConnectWindow(void);
	void ConnectC0Reconnect(void);
    void ConnectC0Disconnect(void);
};    

源文件UartToolsMainWindow.cpp的InitMenubar()函数实现;

void UartToolsMainWindow::InitMenubar()
{
	this->mainWindowMenubar= new QMenuBar();
    this->mainWindowMenubar->setParent(this);

    MainMenuModule tmpMenu;
    MainMenuAction tmpAction;
    tmpMenu.menuName = "Connect";
    tmpMenu.menu = this->mainWindowMenubar->addMenu(tmpMenu.name);

    this->NewActionToMenu(&tmpMenu, "Serial", &UartToolsMainWindow::ShowConnectWindow);
    this->NewActionToMenu(&tmpMenu, "Reconnect", &UartToolsMainWindow::ConnectC0Reconnect);
    this->NewActionToMenu(&tmpMenu, "Disconnect", &UartToolsMainWindow::ConnectC0Disconnect);
    
    this->mainWindowMenuList.insert(this->mainWindowMenuList.length() + 1, tmpMenu);

    this->mainWindowMenubar->addSeparator();
//Easy to connect signal and slot
    for (QList<mainMenu>::iterator menu_i = this->mainWindowMenuList.begin(); menu_i < this->mainWindowMenuList.end(); menu_i++) {
        if ((*menu_i).menu) {
            for (int action_i = 0; action_i < (*menu_i).actionsList.size(); action_i++) {
                if ((*menu_i).actionsList.at(action_i).func) {
                    QObject::connect(((*menu_i).actionsList.at(action_i).action), &QAction::triggered, this, (*menu_i).actionsList.at(action_i).func);
                }
            }
        }
    }
//End of Easy to connect signal and slot

    //set menubar and menu background color
    this->mainWindowMenubar->setStyleSheet("QMenuBar.item{background-color:#E0E0E0;}QMenuBar{background-color:#E0E0E0;}");
    this->mainWindowMenubar->show();
    return;
}    

源文件UartToolsMainWindow.cpp的NewActionToMenu()函数实现;

void UartToolsMainWindow::NewActionToMenu(main_menu *menu, QString actName, void (UartToolsMainWindow::*func) (void))
{
	if (menu) {
		MainMenuAction tmpAction;

    	tmpAction.name = actName;
    	tmpAction.action = menu->menu->addAction(tmpAction.name);
    	tmpAction.func = func;
    	menu->actionsList.append(tmpAction);
	}
    
    return;
}

2、运行结果展示

这个软件本身是实现了串口连接的功能,即通过串口连接目标板,进入shell命令行并使用shell命令操作。
在这里插入图片描述

觉得这篇文章对你有帮助的话,就留下一个赞吧^ v ^*
请尊重作者,转载还请注明出处!感谢配合~
[作者]: Imagine Miracle
[版权]: 本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
[本文链接]: https://blog.csdn.net/qq_36393978/article/details/113340361

QT终端中,可以进行一些设置来满足个人需求。引用中提到了一个升级版本的QT串行端口终端示例,支持持久设置。这意味着你可以在该终端上进行设置,并且这些设置会保存下来,以便下次使用时仍然有效。具体的设置可能包括: 1. 串口参数设置:你可以设置串口的波特率、数据位、停止位、校验位等参数,以确保与外部设备的通信正常进行。 2. 字符编码设置:你可以设置终端的字符编码,以支持unicode字符显示。 3. 字体和颜色设置:你可以设置终端的字体和颜色,以满足个人喜好和视觉需求。 4. 快捷键设置:你可以设置一些快捷键来执行特定的操作,例如清除屏幕、复制粘贴等。 总之,在QT终端中,你可以根据自己的需要进行各种设置,以提高终端的可用性和适应性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [qt-serial-port-terminal:qt串行端口终端示例的升级版](https://download.csdn.net/download/weixin_42100188/18749254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [qtterminalwidget:一个真正的 Qt 终端小部件](https://download.csdn.net/download/weixin_42128676/19840472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [qt串口例程,实际使用,一个qt串口例程,再MainWindow类中定义串口类,实现串口数据的收发,解析等等操作](https://download.csdn.net/download/li171049/88221325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Imagine Miracle

爱你哟 =^ v ^=

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值