设为首页 加入收藏

TOP

Qt 自定义QTabWidget(一)
2019-09-19 18:09:39 】 浏览:99
Tags:定义 QTabWidget

思路:

QTabWidget的特点:点击不同的选项卡显示不同的窗口。可以将QTabWidget分成两部分:

  (1).选项卡:点击时要知道点击的是哪个选项。则需要将选项卡和窗口的信息存起来,点击时去这个信息中判断;

  (2).窗口:点击某个选项卡时,相应的窗口显示,其他窗口隐藏,可以将这些窗口全部放到一个布局中。

 

(1)创建一个结构体,包含选项卡和窗口的信息:

 
struct TabWidgetItem {
  QString id;           //每项的id
  QWidget* window;      //窗口
  IconButton* icon;     //选项卡
  int status;           //0选中; 1选中
};
 
QList<TabWidgetItem*> m_pTabWidgetList;   //存放整个TabWidget(选项卡和窗口所有信息)信息的list列表
 

(2)初始化布局和结构体

void TabWidget::initLayout()
{

   QHBoxLayout* pMainLayout = new QHBoxLayout(this);
  pMainLayout->setMargin(1);
  pMainLayout->setSpacing(10);

  QVBoxLayout* pIconLayout = new QVBoxLayout();
  QVBoxLayout* pWindowLayout = new QVBoxLayout();
 
  pMainLayout->addLayout(pWindowLayout);
  pMainLayout->addLayout(pIconLayout);
}
 

void TabWidget::initTabWidgetItemData()
{

   {
     TabWidgetItem * pItem = new TabWidgetItem;
    pItem->id = "real";
 
    QWidget* pBaseWidget = new QWidget(this);
    pItem->window = pBaseWidget;
    pItem->window->setVisible(false);
    pWindowLayout->addWidget(pItem->window);

       pItem->icon = new IconButton("实时视频", this);
       pIconLayout->addWidget(pItem->icon);
       connect(pItem->icon, SIGNAL(clicked(IconButton*)), this, SLOT(sltMenuClicked(IconButton*)));
 
       pItem->status = false;
       m_pTabWidgetList.append(pItem);
   }
 
  {
    TabWidgetItem* pItem = new TabWidgetItem;
    pItem->id = "local";
 
    QWidget* pBaseWidget = new QWidget(this);
    pItem->window = pBaseWidget;
    pItem->window->setVisible(false);
    pWindowLayout->addWidget(pItem->window);

       pItem->icon = new IconButton("本地回放", this);
       pIconLayout->addWidget(pItem->icon);
       connect(pItem->icon, SIGNAL(clicked(IconButton*)), this, SLOT(sltMenuClicked(IconButton*)));
 
       pItem->status = false;
       m_pTabWidgetList.append(pItem);
   }
}
 
(3)自定义选项卡IconButton
IconButton.h文件
 
#pragma once
 
#include <QWidget>
 
class IconButton: public QWidget
{
    Q_OBJECT
public:
    explicit IconButton(QString title, QWidget *parent = 0);
    ~IconButton();

private:

    QLabel* m_pTitle;
private:
    void initLayout();
public:
    void setTitle(QString title);
protected:
    void mouseReleaseEvent(QMouseEvent *event);
signals:
    void clicked();
signals:
    void clicked(IconButton*);
}
 
IconButton.cpp文件
#include "IconButton.h"
IconButton::IconButton(QString title, QWidget *parent)
    : QWidget(parent)
{
    initLayout();
    setTitle(title);
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇noip2019集训测试赛(二十一)Pro.. 下一篇mysql connector c++ 1.1 API初步..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目