第四十一课、编辑交互功能的实现

一、编辑交互功能

1、编辑器中常规的编辑交互功能

2、QPlainTextEdit提供了丰富的交互接口

3、信号与槽的连接

编辑器代码修改:将action触发的信号映射到QPlainTextEdit对象的槽函数

 

二、文本编辑器中的界面状态

1、不是任何时候都可以复制、粘贴、撤销、重做(比如开始没有数据时)

2、QPlainTextEdit能够发送与界面状态相关的信号

3、实现步骤

(1)、连接界面状态信号到自定义的槽函数

(2)、通过文本信息找到对应的QAction对象

QAction* MainWindow::findMenuBarAction(QString text)
{
    QAction* ret = NULL;

    const QObjectList& list = menuBar()->children();//获得菜单栏

    for(int i=0; i<list.count(); i++)
    {
        QMenu* menu = dynamic_cast<QMenu*>(list[i]);//获得每个子菜单

        if(menu != NULL)
        {
            for(int j=0; j<menu->actions().count(); j++)
            {
                if(menu->actions()[j]->text().startsWith(text))
                {
                    ret = menu->actions()[j];
                    break;
                }
            }
        }

    }

    return ret;
}
QAction* MainWindow::findToolBarAction(QString text)
{
    QAction* ret = NULL;

    const QObjectList& list = children();//获得主窗口的组件

    for(int i=0; i<list.count(); i++)
    {
        QToolBar* tb = dynamic_cast<QToolBar*>(list[i]);//只有工具栏能够转换成功

        if(tb != NULL)
        {
            for(int j=0; j<tb->actions().count(); j++)
            {
                if(tb->actions()[j]->toolTip().startsWith(text))//注意工具栏里面的是toolTip()
                {
                    ret = tb->actions()[j];
                    break;
                }
            }
        }
    }

    return ret;
}

根据文本信息找到QAction对象

(3)、通过信号标志设置QAction对象的界面状态

void MainWindow::onCopyAvailable(bool available)
{
    QAction* action = findMenuBarAction("Copy");
    if(action != NULL)
    {
        action->setEnabled(available);
    }
    action = findToolBarAction("Copy");
    if(action != NULL)
    {
        action->setEnabled(available);
    }

    action = findMenuBarAction("Cut");
    if(action != NULL)
    {
        action->setEnabled(available);
    }

    action = findToolBarAction("Cut");
    if(action != NULL)
    {
        action->setEnabled(available);
    }

}
void MainWindow::onUndoAvailable(bool available)
{
    QAction* action = findMenuBarAction("Undo");
    if(action != NULL)
    {
        action->setEnabled(available);
    }
    action = findToolBarAction("Undo");
    if(action != NULL)
    {
        action->setEnabled(available);
    }
}
void MainWindow::onRedoAvailable(bool available)
{
    QAction* action = findMenuBarAction("Redo");
    if(action != NULL)
    {
        action->setEnabled(available);
    }
    action = findToolBarAction("Redo");
    if(action != NULL)
    {
        action->setEnabled(available);
    }
}

通过信号标志设置QAction对象的界面状态

(4)、其它修改的地方:将Copy、Cut、Redo、Undo等初始状态设置为false

三、小结

(1)、QPlainTextEdit封装了常用的文本编辑功能

(2)、可以将信号直接连接到QPlainTextEdit的公有槽函数

(3)、界面状态是GUI开发的重点和难点

(4)、Qt中组件的状态信号能够简化界面状态的维护

(5)、主窗口中的组件可以通过遍历的方法找回

时间: 2024-10-04 23:39:42

第四十一课、编辑交互功能的实现的相关文章

第41课 编辑交互功能的实现

1. 常规编辑交互功能 (1)复制(Copy).粘贴(Paste).剪切(Cut).撤销(Undo).重做(Redo).删除(Delete) (2)QPlainTextEdit提供了丰富的交互功能接口 2. 信号与槽的连接 [编程实验]基本编辑功能实现 3. 文本编辑器中的界面状态 (1)不是任何时候都能够进行复制.粘贴.撤销或重做.(即部分按钮得灰化处理) (2)QPlainTextEdit能够发送与界面状态相关的信号 ①void copyAvailable(bool yes); ②void

Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能

都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬.但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如果能够通过语音来控制设备,与设备进行交互,那还是很实用的.继上一篇<Windows 10 IoT Serials 4 - 如何在树莓派上使用Cortana语音助手>之后,本文将详细讲述如何为运行Windows 10 IoT Core系统的树莓派添加语音识别和语音交互功能. 1. 硬件准备 树莓派2/树莓派3.5V/2A电源.TF卡(8GB以上)

iOS开发之功能模块--高仿Boss直聘的IM界面交互功能

本人公司项目属于社交类,高仿Boss直聘早期的版本,现在Boss直聘界面风格,交互风格都不如Boss直聘以前版本的好看. 本人通过iPhone模拟器和本人真机对聊,将完成的交互功能通过Mac截屏模拟器来录制基本的交互功能. 界面因为动态截图工具本身不完美,截屏失真,所以存在有的部分UI颜色稍微变化了,比如白色稍微变灰暗色,不是项目本身的问题. 因为是本公司项目,不提供源码,只提供交互动态图仅供观赏??. (备注:Boss直聘分为个人端和企业端) 1.基本功能描述: 在个人端,一开始会话列表没有任

js+html+css实现简单页面交互功能(2015知乎前端笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2 密码:hellozhihu

Oracle Apex 有用笔记系列 6 - 可编辑交互报告 Editable Interactive Report

据笔者所知.Apex 4.x 是没有提供可编辑交互报告组件的.这就须要我们手动实现. 事实上这也并非非常复杂,仅仅须要简单几步. 1. 依据向导建立一个interactive report.查询语句能够例如以下. select apex_item.hidden(1,e.id) || e.name as staff, apex_item.select_list_from_lov(p_idx=>2,p_value=>e.department_id,p_lov=>'lov_department

Oracle Apex 实用笔记系列 6 - 可编辑交互报告 Editable Interactive Report

据笔者所知,Apex 4.x 是没有提供可编辑交互报告组件的.这就需要我们手动实现.其实这也并不是很复杂,只需要简单几步. 1. 根据向导建立一个interactive report.查询语句可以如下. select apex_item.hidden(1,e.id) || e.name as staff, apex_item.select_list_from_lov(p_idx=>2,p_value=>e.department_id,p_lov=>'lov_department') as

OpenLayers 之 地图交互功能(interaction)详解

地图交互功能和上一篇讲的地图控件有些混淆,它们都控制着用户与地图的交互,区别是地图控件的触发都是一些可见的 HTML 元素触发,如按钮.链接等:而交互功能都是一些设备行为触发,都是不可见的,如鼠标双击.滚轮滑动等,手机设备的手指缩放等. 地图的交互功能包含很多,如地图双击放大,鼠标滚轮缩放,矢量要素点选,地图上绘制图形等等.只要是涉及到与地图的交互,就会涉及到 intercation 类,它定义了用户与地图进行交互的基本要素和事件.下面我们就来看看用户与地图都有那些交互,怎么交互. 注: '自定

C#交互功能的演化

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:Miguel de Icaza在最近发表的一篇博文中畅谈了Mono及其相关产品中的C#交互特性的演化情况. 早期 在2008年,Miguel他们在Mono中引入了一个C# Shell程序(仅有命令行).在实现这个交互Shell的过程,Mono为.NET实现了大量有用的命令行编辑API,也促进了Mono自己的编译器即服务特性的开发.几个月后,为这套Shell添加了一个UI界面.如下图所示: 并且还加入了p

Markdown文本编辑器在信息发布及信息交互功能上的使用(一)

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式. MarkdownEditor 是一款基于浏览器的 Markdown 文本编辑器,功能非常简单实用. 在线地址:http://jbt.github.io/markdown-editor 资源地址:https://github.com/jbt/markdown-editor 此文本编辑器使用许可描述为"只要你喜欢,你可以随意复制.修改和使用他.(Feel free to ta