QT6 C++ 高仿QQ -- 3. 主界面MainWindow,像素级Copy某Q了吧

运行效果图

UI上整体是英文,后续可以方便的翻译为其他语种,有点像素级copy QQ,有木有。
在这里插入图片描述

主界面布局

MainWindow是继承于QMainWindow的无边框主界面,主界面放了一个QWidget,左右布局,左边widgetLeft是快捷功能导航,右边widgetRight是主要功能区。右边widgetRight也是左右布局,左边widgetRightLeft是中间导航区,右边是点击中间导航后呈现的内容区widgetRightRight,mainwindow.ui如下图
在这里插入图片描述

widgetLeft左边快捷功能导航

UI布局说明

一级功能快捷导航为自定义的QWidget,整体垂直布局。

    1. 最上面是用户头像QLabel,用户更新了头像可以加载显示到QLabel中,可点击弹出个人信息的非模态对话框。
    1. 中间widgetNav为自定义的QWidget,主要承载大的功能的QStackWidget切换。
    1. H为与host通信状态QLabel,S为与服务器通信状态QLable。
    1. 最下面更多功能按钮btnMore,弹出菜单执行用户登录、注册、修改密码、等功能。
      左边功能已经功能快捷导航widgetLeft

widgetRight右边功能导航/title/内容展示区

右侧为QSplitter分割的左右布局,左边widgetRightLeft为中间功能导航区,middleStackedWidge承载左侧一级功能导航窗口。
widgetRightRight为上下布局,上面是自定义title,承载app最大化/最小化/关闭功能按钮;下面部分rightStacktWidget承载中间二级功能导航窗口。
在这里插入图片描述

关键功能代码

初始化左侧工具栏

//初始化左侧工具条的按钮
void MainWindow::initLeftToolBar()
{
   
   
    //1.头像QLabel
    ui->headerLabel->setFixedSize(40, 40);
    ui->headerLabel->setAlignment(Qt::AlignCenter);
    ui->headerLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    ui->headerLabel->setStyleSheet("border:none; ");
    ui->headerLabel->installEventFilter(this);  //1.给label安装事件过滤器

    if (userInfo_->headerImage.empty()) {
   
   
        //设置默认头像
        ui->headerLabel->setStyleSheet("QLabel{"
            "image:url(:/res/image/header.png) 4 4 4 4 stretch stretch;border-radius:15px;"
            "}");
    }

    //2. stackWidget功能导航区
    initNav();        //左侧QToolbutton导航
    initIcon();       //QToolbutton的字体图标设置

    //3. 清空与host和server通信状态文字
    ui->ipcStateLabel->setText("");
    ui->serverStateLabel->setText("");

    //4. 更多功能
    initBtnMore();    //初始化左侧更多按钮和样式
}

这里代码的关键点在于给QLable安装事件监听,用户点击头像弹出个人详细信息对话框。

bool MainWindow::eventFilter(QObject* object, QEvent* event)
{
   
   
    if (object == ui->headerLabel) {
   
   //2.监听头像label
        if (event->type() == QEvent::MouseButtonPress && ((QMouseEvent*)event)->button() == Qt::LeftButton) {
   
   
            //头像label点击, 弹出个人信息
            on_headerLabel_clicked();
            return true;
        }
        else {
   
   
            return QWidget::eventFilter(object, event);
        }
    }

    if (object = ui->widgetTitle) {
   
   
        //双击标题栏最大化
        if (event->type() == QEvent::MouseButtonDblClick) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chrisLee_sz

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值