QTabWidget+QToolBar实现浏览器标签页
来源:互联网 发布:淘宝网店图片马云 编辑:程序博客网 时间:2024/05/02 03:05
直接上代码
/********************************************************************* author 周翔* e-mail 604487178@qq.com* blog http://blog.csdn.net/zhx6044**********************************************************************/#ifndef TABWORKSPACE_H#define TABWORKSPACE_H#include <QTabWidget>#include <QTabBar>#include <QToolBar>#include <QAction>#include <QMenu>#include <QToolButton>class TabWorkSpace : public QTabWidget{ Q_OBJECTpublic: explicit TabWorkSpace(QWidget *parent = 0); signals: public slots:protected: void resizeEvent(QResizeEvent *e);private slots: void slt_newTab(); void slt_closeTab(int index); void slt_showTab(QAction *a);private: enum RESETFLAG{NEW, CLOSE, NORMAL, SPECIAL}; QToolBar *tab_control; QAction *new_tab; QAction *list_tabs; QWidget *padding_widget; void initTabControl(); /** * @brief resetTabBar 重置TabBar */ void resetTabBar(RESETFLAG flag); void setListTabs(); };#endif // TABWORKSPACE_H/********************************************************************* author 周翔* e-mail 604487178@qq.com* blog http://blog.csdn.net/zhx6044**********************************************************************/#include "tabworkspace.h"#include <QDebug>TabWorkSpace::TabWorkSpace(QWidget *parent) : QTabWidget(parent){ this->addTab(new QWidget,"utitle"); this->addTab(new QWidget,"utitle"); this->setUsesScrollButtons(true); this->setTabsClosable(true); this->setMovable(true); initTabControl(); this->setCornerWidget(tab_control); resetTabBar(NORMAL); connect(this,SIGNAL(tabCloseRequested(int)),this,SLOT(slt_closeTab(int)));}void TabWorkSpace::resizeEvent(QResizeEvent *e){ resetTabBar(NORMAL); QTabWidget::resizeEvent(e);}void TabWorkSpace::resetTabBar(RESETFLAG flag){ QSize size = this->size(); int tabsWidth = 0; int tabsHeight = tabBar()->height(); int tabs = count(); if (flag == NEW || flag == NORMAL) { for (int i = 0;i < tabs;++i) { tabsWidth += tabBar()->tabRect(i).width(); } } else { for (int i = 0;i < tabs - 1;++i) { tabsWidth += tabBar()->tabRect(i).width(); } } if (size.width() > tabsWidth) { // if (flag == SPECIAL) { padding_widget->setMinimumWidth(size.width() - tabsWidth - 40); } else { padding_widget->setMinimumWidth(size.width() - tabsWidth - 35); } list_tabs->setVisible(false); } else { // list_tabs->setVisible(true); setListTabs(); qDebug() << "?"; padding_widget->setMinimumWidth(0); } padding_widget->setMinimumHeight(tabsHeight);}void TabWorkSpace::initTabControl(){ tab_control = new QToolBar(); QList<QAction*> actions; new_tab = new QAction("+",tab_control); list_tabs = new QAction("V",tab_control); list_tabs->setVisible(false); actions << new_tab << list_tabs; tab_control->addActions(actions); padding_widget = new QWidget(); tab_control->addWidget(padding_widget); tab_control->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); connect(new_tab,SIGNAL(triggered()),this,SLOT(slt_newTab()));}void TabWorkSpace::slt_newTab(){ this->addTab(new QWidget,"utitle"); if (!tabsClosable()) { setTabsClosable(true); } resetTabBar(NEW);}void TabWorkSpace::slt_closeTab(int index){ widget(index)->deleteLater(); resetTabBar(CLOSE); if (count() == 2) { setTabsClosable(false); resetTabBar(SPECIAL); }}void TabWorkSpace::setListTabs(){ QMenu *list = new QMenu(); int c = count(); for (int i = 0;i < c;++i) { QAction *action = new QAction(tabText(i),list); action->setProperty("index", i); list->addAction(action); } QMenu *old = list_tabs->menu(); delete old; list_tabs->setMenu(list); connect(list,SIGNAL(triggered(QAction*)),this,SLOT(slt_showTab(QAction*)));}void TabWorkSpace::slt_showTab(QAction *a){ // QAction *_sender = static_cast<QAction*> (sender()); int index = a->property("index").toInt(); setCurrentIndex(index);}/********************************************************************* author 周翔* e-mail 604487178@qq.com* blog http://blog.csdn.net/zhx6044**********************************************************************/#include <QApplication>#include "tabworkspace.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); TabWorkSpace tws; tws.resize(640,380); tws.show(); return a.exec();}
现在还遇到一个问题,就是点击list_tabs动作事,点击好多下菜单才出现,不知道什么原因,还希望谁给点指示。
- QTabWidget+QToolBar实现浏览器标签页
- QtDesigner--QTabWidget标签页
- QTabWidget 标签页用法笔记
- QTabWidget 双击 关闭tab标签
- Qt学习八:控件五:QTabWidget控件、QMenu和QToolBar控件、
- 单标签页简易浏览器实现
- QTabWidget
- QTabWidget
- QTabWidget
- VS2010+QT5编程之用QTabWidget写标签页(页码)的注意事项
- QTabWidget添加关闭子标签功能
- QTabWidget之设置当前活动标签
- libcef多标签浏览器实现
- QTabWidget 双击增加tab页
- 如何实现浏览器内多个标签页之间的通信
- 如何实现浏览器内多个标签页之间的通信
- 如何实现浏览器内多个标签页之间的通信?
- 如何实现浏览器内多个标签页之间的通信?
- 第一次写python代码--纪念一下
- 关于app的加载中和退出
- JVM中Perm区持续上涨问题
- 如果这是一个游戏画面,我相信会给人一种感动
- 无线测试产品试用记录
- QTabWidget+QToolBar实现浏览器标签页
- 我的2013年(质量提升)
- “网易云阅读”-移动架构
- nyist-79
- Triangles
- 每周阅读精选(2013-02-18)
- 看CopyOnWriteArrayList源代码之后
- 每周阅读精选(2013-02-25)
- oracle导出数据库