Qt 自定义QTabWidget
2019-09-23 08:40:10来源:博客园 阅读 ()
Qt 自定义QTabWidget
思路:
QTabWidget的特点:点击不同的选项卡显示不同的窗口。可以将QTabWidget分成两部分:
(1).选项卡:点击时要知道点击的是哪个选项。则需要将选项卡和窗口的信息存起来,点击时去这个信息中判断;
(2).窗口:点击某个选项卡时,相应的窗口显示,其他窗口隐藏,可以将这些窗口全部放到一个布局中。
(1)创建一个结构体,包含选项卡和窗口的信息:
struct TabWidgetItem { QString id; //每项的idQWidget* 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()
{
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);
}
void IconButton::initLayout()
{ m_pMainLayout = new QHBoxLayout(this); m_pTitle = new QLabel(this);
m_pTitle->setStyleSheet("QLabel{font-size:15px;font-weight:100;color:white;}"); m_pMainLayout->addWidget(m_pTitle, 0, Qt::AlignLeft);
}
void IconButton::setTitle(QString title)
{
m_pTitle->setText(title);
}
void IconButton::mouseReleaseEvent(QMouseEvent *event)
{ if (Qt::LeftButton == event->button())
{
/* 只处理鼠标在按钮区域弹起 */
if (this->rect().contains(event->pos()))
{
/* 单击 */
emit clicked();
emit clicked(this); //关键:单击返回this指针
}
}
}
(4)设置切换函数
void TabWidget::setTabWidgetActivePage(QString id){
QWidget* pNextwindow = NULL;
for (int i = 0; i < m_pTabWidgetList.size(); i++) { //先将所有窗口隐藏
TabWidgetItem* item = m_pTabWidgetList.at(i);
item->status = 0;
item->icon->setChekced(false);
item->window->hide(); if (item->id == id) {
item->status = 1;
item->icon->setChekced(true);
pNextwindow = item->window;
}
}
if (pNextwindow) {
pNextwindow->show(); //再显示选择的窗口
}
}
void TabWidget::sltMenuClicked(IconButton * btn)
{
for (int i = 0; i < m_pTabWidgetList.size(); i++) {
TabWidgetItem* item = m_pTabWidgetList.at(i);
if (item->icon == btn) {
setTabWidgetActivePage(item->id);
break;
}
}
}
TabWidget::TabWidget(QWidget *parent)
{
initTabWidgetData();
setTabWidgetActivePage("real"); } (5)大功告成 我只是把核心代码写下来了,别的花里胡哨的添加自己写...
原文链接:https://www.cnblogs.com/tingtaishou/p/11547013.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C程序设计语言练习 第二章
下一篇:使用微信助手搭建微信返利机器人
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++中自定义结构体或类作为关联容器的键 2020-03-15
- c++-变量,this指针,全局函数,成员函数,自定义数组类 2019-12-21
- std::map自定义类型key 2019-12-03
- 自定义日历(四)-区间选择控件 2019-11-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash