侧边栏按钮
我们接下来实现侧边栏按钮功能,希望点击一个按钮,清空其他按钮的选中状态。而我们又希望按钮上面能在有新的通知的时候出现红点的图标,所以不能用简单的按钮,要用自定义的一个widget实现点击效果
我们自定义StateWidget ,声明如下
1 | class StateWidget : public QWidget |
接下来实现定义
1 | StateWidget::StateWidget(QWidget *parent): QWidget(parent),_curstate(ClickLbState::Normal) |
为了让按钮好看一点,我们修改下qss文件
1 | #chat_user_name { |
回到ChatDialog.ui中,将side_chat_lb改为StateWidget,side_contact_lb改为StateWidget。
接下来回到ChatDialog.cpp中构造函数中添加
1 | QPixmap pixmap(":/res/head_1.jpg"); |
切换函数中实现如下
1 | void ChatDialog::slot_side_chat() |
上述函数我们实现了清楚其他标签选中状态,只将被点击的标签设置为选中的效果,核心功能是下面
1 | void ChatDialog::ClearLabelState(StateWidget *lb) |
我们在构造函数里将要管理的标签通过AddGroup函数加入_lb_list实现管理
1 | void ChatDialog::AddLBGroup(StateWidget *lb) |
搜索列表类
在pro中添加我们自定义一个搜索列表类
1 | class SearchList: public QListWidget |
然后在构造函数中初始化条目列表
1 | SearchList::SearchList(QWidget *parent):QListWidget(parent),_find_dlg(nullptr), _search_edit(nullptr), _send_pending(false) |
addTipItem是用来添加一个一个条目的
1 | void SearchList::addTipItem() |
sig_user_search可以先在TcpMgr中声明信号
1 | void sig_user_search(std::shared_ptr<SearchInfo>); |
SearchInfo定义在userdata.h中
1 | class SearchInfo { |
接下来实现我们自定义的AddUserItem, 在pro中添加qt设计师界面类AddUserItem
1 | class AddUserItem : public ListItemBase |
实现
1 | AddUserItem::AddUserItem(QWidget *parent) : |
我们将ChatDialog.ui中将search_list升级为SearchList类型
美化界面
我们用qss美化界面
1 | #search_edit { |
我们在ChatDialog的构造函数中添加
1 | //链接搜索框输入变化 |
slot_text_changed槽函数中实现
1 | void ChatDialog::slot_text_changed(const QString &str) |
源码和视频
再次启动后在输入框输入文字,就会显示搜索框