宫格控制
<p>本文详细描述了宫格模式切换的UI逻辑以及程序逻辑</p>
<h2>一. 宫格模式切换</h2>
<pre><code>在ITaskMainPanel类中, 聚合使用了右下角的几个模式切换按纽, 它们是:演讲模式,宫格模式,列表模式
当用户点击了宫格模式按纽以后, 会触发对应m_pButtonGrid对象所绑定的按纽事件ITaskMainPanel::OnRightBottomButtonClicked
在这个事件处理中, 程序会执行下列逻辑:
1. 设置按纽选中状态和样式
2. 设置列表模式标志EmUIKind::em_list, 可以通过
3. 更新宫格位置数据以及左右键头显示状态</code></pre>
<h2>二. 布局调整与OnSize事件</h2>
<pre><code>由于在列表模式中加入了左右键头按纽, 所以以前的grid布局已经不能胜任
在先前的grid外面又嵌套了一层HBoxLayout, 权重为0,1,0
先前的逻辑并没有仔细研究, 发现在HBoxLayout布局里加入左右键头以后(单加左不会), 会使中间的列表窗口高度同化, 所以需要使用
OnSize事件(ITaskCentre::resizeEvent)处理一下中间grid布局的大小
新加代码:
QRect rcClient = m_pRootGridLayout->contentsRect();
m_pVideoContainer->setFixedHeight(rcClient.height());</code></pre>
<h2>三. 左右键头管理</h2>
<pre><code>在ITaskCentre类中, 组合使用了宫格左键头(m_btnArrowLeft)和宫格右键头(m_btnArrowRight).
在ITaskCentre::InitITaskCentre() 中将会对按纽样式和大小, 以及布局进行初始化, 同时会绑定这两个按纽的点击事件:
ITaskVideoContainer::OnButtonArrowLeft()
ITaskVideoContainer::OnButtonArrowRight()
当用户点击这两个按纽的事件以后, 程序将进行当前页与最小/最大页进行判断, 并将当前页设置成翻页以后的最新页
对应变量内容为:
int ITaskVideoContainer::m_nPageCurrent // 当前页
int ITaskVideoContainer::m_nPageCount // 最大页
最后, 通过调用HBTalkCentre::getInstance()->UpdateUserListInOutNumber(); 方法更新宫格模式最新布局.</code></pre>
<h2>四. 切页管理</h2>
<pre><code>当用户点击了左翻和右翻的键头, 则会触发切页的功能, 对应的事件处理方法如下:
void ITaskVideoContainer::OnButtonArrowLeft()
void ITaskVideoContainer::OnButtonArrowRight()
当用户点击了向左按纽, 在这里判断是否还有左页, 如果没有则隐藏左按纽
当用户点击了向右按纽, 在这里判断是否还有右页, 如果没有则隐藏右按纽
最后, 更新主窗口中的宫格模式窗口内容, 参考如下方法:
HBTalkCentre::getInstance()->UpdateUserListInOutNumber();</code></pre>
<h2>五. 调试方法</h2>
<pre><code>如果没有实际的客户端 , 可以通过Ctrl+小键盘+号来添加虚拟坐位, 以测试左右翻页功能
另外, 可以通过胡力华写的命令行python测试工具来添加实际用户来进行真实数据的测试.
代码参考:void ITaskMainPanel::keyReleaseEvent(QKeyEvent* event)</code></pre>