精华内容
下载资源
问答
  • QTabWidget详解

    2020-11-25 11:46:54
    QTabWidget详解,带右键菜单,QTabWidget详解,带右键菜单QTabWidget详解,带右键菜单QTabWidget详解,带右键菜单
  • QTabWidget使用

    2020-11-25 11:26:39
    QTabWidget使用,适合新手,QTabWidget使用,适合新手,QTabWidget使用,适合新手
  • 自己实现的QTabWidget加美化,可以作为参数设置用在QDockWidget上,加了标签 自己实现了竖向的TabWidget,可以用在DockWidget上,使布局更加合理
  • 主要介绍了QTabWidget标签实现双击关闭的方法(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • QTabWidget,在窗口之间具有Draggind选项卡,可在单独的窗口中返回,就像在浏览器中一样。 用Qt 5.12制作
  • 今天小编就为大家分享一篇对pyqt5中QTabWidget的相关操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • PyQt5选项卡控件QTabWidget简介 QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面,通过单击各选项卡可以查看对应的界面,如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分...
  • 关于qtabWidget tab竖写方式,感谢 來生願做壹條魚 网友提供,Qt5环境
  • QTabWidget之间可以实现拖动,分离出新的窗口到另一个QTabWidget
  • QTabWidget改变Tarbar位置并修改文字方向
  • 工程使用 VS2015+Qt5.9.1, 实现类似 ie,goole 浏览器类型, 超过窗口宽度时, 展示下拉菜单展示
  • QTabWidge的标签鼠标按下移动再松开,可拖拽出窗口,双击拖拽出的窗口标题栏,可还原到QTabWidget中。
  • Qt例程源代码QTabWidget.7z
  • QRibbon:Qt实现的Ribbon样式菜单栏,基本思路是自定义QTabWidget,通过QSS(样式表)实现显示样式的调整,QRibbon的原则是尽量不介入正常业务逻辑的开发,所以在开发基于QMainWindow的程序时,可以按照正常的开发...
  • 案例:QTabWidget与QLineEdit详细解析
  • QTabWidget样式表

    2021-08-31 11:16:43
    1、QTabWidget模型,来自于网络: 2、样式设置: this->setStyleSheet("QTabWidget::pane{border-width:1px;border-color:rgb(48, 104, 151);\ border-style: outset;background-color: rgb(132, 171, 208)...

    1、QTabWidget模型,来自于网络:

    在这里插入图片描述

     2、样式设置:

    this->setStyleSheet("QTabWidget::pane{border-width:1px;border-color:rgb(48, 104, 151);\
                                        border-style: outset;background-color: rgb(132, 171, 208);\
    background: transparent;} \
    QTabWidget::tab-bar{width:600; subcontrol-position:left;}\
    QTabBar::tab{border-bottom-color: #C2C7CB;\
             background: #3498DB;\
             border: 2px solid #C2C7CB;\
                 border-radius:0;\
                          border-top-left-radius: 5px;\
                                   border-top-right-radius: 5px;\
                                            max-width: 75px; min-width:75px; min-height:25px;\
             font:14px Times New Roman;\
             padding: 5px;}\
    QTabBar::tab:hover{background-color:#30587B;}\
    QTabBar::tab:selected{background-color:#20C8
    展开全文
  • QTabWidget 重命名tabText

    2021-11-23 15:29:49
    QTabWidget 重命名tabText(这里写自定义目录标题) 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown...

    #QTabWidget 重命名tabText
    通过双击Tab页,修改Tab页显示的文字,可以通过重写QTabBar的鼠标的双击事件实现,就需要子类化QTabBar。由于QTabWidget里的setTabBar是受保护的,所以QTabWidget也需要重写。
    edittabbar.h

    #ifndef EDITBAR_H
    #define EDITBAR_H
    
    #include <QWidget>
    #include <QTabBar>
    #include <QLineEdit>
    #include <QMouseEvent>
    
    
    class EditTabBar : public QTabBar
    {
    	Q_OBJECT
    public:
    	EditTabBar(QWidget* parent = 0);
    	~EditTabBar();
    	void mouseDoubleClickEvent(QMouseEvent *e);
    	public slots:
    	void renameLabel();
    signals:
    	void tabarTextChg(int index, QString str);
    private:
    	QLineEdit* m_lineEdit;
    	int m_editedTabIndex;
    };
    
    
    #endif // EDITBAR_H
    
    

    重写鼠标双击事件,通过QLineEdit实现tabText文字编辑,编辑完成后调用setTabText 修改tab标题。注意,此时需要隐藏QLineEdit。并发出信号告诉外界tab页标题变化,供外部使用。
    edittabbar.cpp

    #include "EditTabBar.h"
    
    
    EditTabBar::EditTabBar(QWidget* parent)
    :QTabBar(parent)
    {
    	m_lineEdit = new QLineEdit(this);
    	m_lineEdit->hide();
    	connect(m_lineEdit, SIGNAL(editingFinished()),
    		this, SLOT(renameLabel()));
    }
    
    EditTabBar::~EditTabBar()
    {
    
    }
    
    void EditTabBar::mouseDoubleClickEvent(QMouseEvent *e)
    {
    	if (e->button () != Qt::LeftButton) 
    	{
    		QTabBar::mouseDoubleClickEvent (e);
    		return;
    	}
    	m_editedTabIndex = currentIndex ();
    	m_lineEdit->setText(tabText(m_editedTabIndex));     
    	m_lineEdit->setGeometry(tabRect(m_editedTabIndex));
    	m_lineEdit->show();
    }
    
    void EditTabBar::renameLabel()
    {
    	setTabText (m_editedTabIndex, m_lineEdit->text());
    	m_lineEdit->hide();
    	emit tabarTextChg(m_editedTabIndex, m_lineEdit->text());
    }
    
    

    qtabwidget.h

    #ifndef EDITTABWIDGET_H
    #define EDITTABWIDGET_H
    
    #include <QTabWidget>
    class EditTabBar;
    class EditTabWidget : public QTabWidget
    {
    	Q_OBJECT
    public:
    	EditTabWidget(QWidget* parent = 0);
    	~EditTabWidget();
    signals:
    	void tabTextChg(int index, QString str);
    private:
    	EditTabBar* tabBar;
    };
    
    #endif // EDITTABWIDGET_H
    
    

    qtabwidget.cpp
    负责使用editbar,并加了tabTextChg(int index, QString str)向外传递tab页标题变化。

    #include "EditTabBar.h"
    #include "EditTabWidget.h"
    
    EditTabWidget::EditTabWidget(QWidget* parent)
    :QTabWidget(parent)
    {
    	tabBar = new EditTabBar(this);
    	setTabBar(tabBar);
    	connect(tabBar, SIGNAL(tabarTextChg(int, QString)),
    		this, SIGNAL(tabTextChg(int, QString)));
    }
    
    EditTabWidget::~EditTabWidget()
    {
    
    }
    

    edtitabtest.h

    #ifndef EDITTABTEST_H
    #define EDITTABTEST_H
    
    #include <QtGui/QMainWindow>
    #include <QScopedPointer>
    class EditTabTest : public QMainWindow
    {
    	Q_OBJECT
    
    public:
    	EditTabTest(QWidget *parent = 0, Qt::WFlags flags = 0);
    	~EditTabTest();
    	QSize sizeHint() const
    	{
    		return QSize(400,300);
    	}
    public slots:
    	void slot_StateNameChg(int index, QString str);
    private:
    	class Impl;
    	QScopedPointer<Impl> m_Impl;
    };
    
    #endif // EDITTABTEST_H
    
    

    edittabtest.cpp

    #include "edittabtest.h"
    #include "EditTabBar.h"
    #include "EditTabWidget.h"
    #include <QHBoxLayout>
    #include <QVBoxLayout>
    #include <QDebug>
    
    class EditTabTest::Impl
    {
    public:
    	Impl()
    	{
    
    	}
    	QWidget *centralWidget;
    	EditTabWidget*	editTabWidget;
    	QWidget* tab1;
    	QWidget* tab2;
    	void setupUi(EditTabTest* parent);
    	void initWidget(EditTabTest* parent);
    	void retranslateUi(EditTabTest* parent);
    };
    
    void EditTabTest::Impl::setupUi(EditTabTest* parent)
    {
    	centralWidget = new QWidget(parent);
    	QVBoxLayout* vlMain = new QVBoxLayout(centralWidget);
    
    	editTabWidget = new EditTabWidget(parent);
    	tab1 = new QWidget();
    	tab2 = new QWidget();
    	editTabWidget->addTab(tab1, QString());
    	editTabWidget->addTab(tab2, QString());
    	vlMain->addWidget(editTabWidget);
    
        parent->setCentralWidget(centralWidget);
    
    	initWidget(parent);
    	retranslateUi(parent);
    }
    
    void EditTabTest::Impl::initWidget(EditTabTest* parent)
    {
    	connect(editTabWidget, SIGNAL(tabTextChg(int, QString)),
    		parent, SLOT(slot_StateNameChg(int, QString)));
    	
    }
    
    void EditTabTest::Impl::retranslateUi(EditTabTest* parent)
    {
    	editTabWidget->setTabText(0, tr("测试页1"));
    	editTabWidget->setTabText(1, tr("测试页2"));
    }
    
    EditTabTest::EditTabTest(QWidget *parent, Qt::WFlags flags)
    	: QMainWindow(parent, flags)
    	, m_Impl(new Impl)
    {
    	m_Impl->setupUi(this);
    }
    
    EditTabTest::~EditTabTest()
    {
    
    }
    
    void EditTabTest::slot_StateNameChg(int index, QString str)
    {
    	qDebug() << index << str;
    }
    
    

    main.cpp

    #include "edittabtest.h"
    #include <QtGui/QApplication>
    #include <QTextCodec>
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	//设置中文编码
    #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
    #if _MSC_VER
    	QTextCodec *codec = QTextCodec::codecForName("GBK");
    #else
    	QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    #endif
    	QTextCodec::setCodecForLocale(codec);
    	QTextCodec::setCodecForCStrings(codec);
    	QTextCodec::setCodecForTr(codec);
    #else
    	QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    	QTextCodec::setCodecForLocale(codec);
    #endif
    
    	EditTabTest w;
    	w.show();
    	return a.exec();
    }
    
    
    展开全文
  • QTabWidget添加自定义样式

    千次阅读 2020-12-19 12:24:47
    setStyleSheet("QTabWidget::pane{border-width:1px;border-color:rgb(48,104,151);\border-style:outset;background-color:rgb(132,171,208);\background:transparent;}\QTabWidget::tab-bar{border-width:...

    setStyleSheet("QTabWidget::pane{border-width:1px;border-color:rgb(48, 104, 151);\

    border-style: outset;background-color: rgb(132, 171, 208);\

    background: transparent;} \

    QTabWidget::tab-bar{border-width:0px;}\

    QTabBar::tab{border-bottom-color: #C2C7CB;\

    border-top-left-radius: 0px;\

    border-top-right-radius: 0px;\

    max-width: 75px; min-width:75px; min-height:25px;\

    font:14px Times New Roman;\

    padding: 0px;\

    }\

    QTabBar::scroller {\

    width:25;\

    border:0;\

    padding: 0px;\

    }\

    QTabBar QToolButton::right-arrow {\

    background-color:rgb(132, 171, 208);\

    border-width: 0;\

    background-image: url(:/images/tab/rightbtn.png);\

    }\

    QTabBar QToolButton::right-arrow:hover {\

    background-color:rgb(132, 171, 208);\

    border-width: 0;\

    background-image: url(:/images/tab/hoverrightbtn.png);\

    }\

    QTabBar QToolButton::right-arrow:disabled {\

    background-color:rgb(132, 171, 208);\

    border-width: 0;\

    background-image: url(:/images/tab/grayrightbtn.png);\

    }\

    QTabBar QToolButton::left-arrow {\

    background-color:rgb(132, 171, 208);\

    border-width: 0;\

    background-image: url(:/images/tab/leftbtn.png);\

    }\

    QTabBar QToolButton::left-arrow:hover {\

    background-color:rgb(132, 171, 208);\

    border-width: 0;\

    background-image: url(:/images/tab/hoverleftbtn.png);\

    }\

    QTabBar QToolButton::left-arrow:disabled {\

    background-color:rgb(132, 171, 208);\

    border-width: 0;\

    background-image: url(:/images/tab/grayleftbtn.png);\

    }\

    QTabBar::tab:first:selected {\

    margin-left: 30; margin-right: 0;\

    color: white;\

    border-image: url(:/images/tab/sel3.png);\

    }\

    QTabBar::tab:first:!selected {\

    color: black;\

    margin-left: 30; margin-right: 0;\

    border-image: url(:/images/tab/normal3.png);\

    }\

    QTabBar::tab:first:hover:!selected {\

    color: black;\

    margin-left: 30; margin-right: 0;\

    border-image: url(:/images/tab/hover3.png);\

    }\

    QTabBar::tab:middle:selected {\

    margin-top: 0; margin-left: -15; margin-right: 8;\

    color: white;\

    border-image: url(:/images/tab/sel3.png);\

    }\

    QTabBar::tab:middle:!selected {\

    color: black;\

    margin-top: 0; margin-left: -15; margin-right: 8;\

    border-image: url(:/images/tab/normal3.png);\

    }\

    QTabBar::tab:middle:hover:!selected {\

    color: black;\

    margin-top: 0; margin-left: -15; margin-right: 8;\

    border-image: url(:/images/tab/hover3.png);\

    }\

    QTabBar::tab:last:selected {\

    margin-top: 0px; margin-left: 0; margin-right: 0;\

    color: white;\

    border-image: url();\

    }\

    QTabBar::tab:last:!selected {\

    color: black;\

    margin-top: 0; margin-left: 0; margin-right: 0;\

    border-image: url();\

    }\

    QTabBar::tab:last:hover:!selected {\

    color: black;\

    margin-top: 0; margin-left: 0; margin-right: 0;\

    border-image: url();\

    }\

    QTabBar::tab:only-one {\

    margin: 0;\

    }");

    tab标签的长度,也需要重载QTabBar来动态计算。

    二、设置QTabwidget的TabBar的样式1

    QString tabBarStyle = "QTabBar::tab {min-width:100px;color: white;border: 2px solid;border-top-left-radius: 10px;border-top-right-radius: 10px;padding:5px;}\

    QTabBar::tab:!selected {margin-top: 5px;} \

    QTabBar::tab:selected {color: blue;}";

    m_TabWidget->setStyleSheet(tabBarStyle);

    三、设置QTabwidget的TabBar的样式2

    QTabWidget::pane{

    border:none;

    }

    QTabWidget::tab-bar{

    alignment:left;

    }

    QTabBar::tab{

    background:transparent;

    color:white;

    min-width:30ex;

    min-height:10ex;

    }

    QTabBar::tab:hover{

    background:rgb(255, 255, 255, 100);

    }

    QTabBar::tab:selected{

    border-color: white;

    background:white;

    color:green;

    }

    http://blog.csdn.net/libaineu2004/article/details/39829749

    展开全文
  • 70, 621, 431)) self.tabWidget.setLayoutDirection(QtCore.Qt.LeftToRight) self.tabWidget.setTabPosition(QtWidgets.QTabWidget.West) self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded) self....
  • 0.实现效果 (声明:这只是个测试,不是很满意,放着也没用就分享下) 实现效果GIF: 完整代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/MyTabWidget ...QTabWidget的Tab

    0.实现效果

    (声明:这只是个测试,不是很满意,放着也没用就分享下)

    实现效果GIF:

    完整代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/MyTabWidget

    相关参考:https://www.cnblogs.com/findumars/p/5175984.html

    相关参考:https://github.com/MRXY001/Qt-DragableTabWidget

    1.实现过程

    QTabWidget的Tab页签只能拖拽交换顺序,没有把Tab页拖入拖出的功能,我们可以通过继承QTabBar重新实现部分接口来实现这个功能。

    首先是Tab页的拖出,主要通过QTabBar的鼠标事件来处理,如果拖出了QTabBar的区域就生成一个QDrag,用于显示Tab页的快照跟随鼠标。

    当鼠标释放的时候,如果在QTabBar外部,则从QTabBar移除该页面,作为一个独立的窗口显示。

    然后是Tab页的拖回,也是判断鼠标释放时的位置,如果在QTabBar范围,就添加到QTabBar中。

    (1.目前这种方式效果不理想,太生硬了,没有浏览器Tab拖拽那种流畅的感觉,后期修改的话可能需要实时判断位置,而不是鼠标释放时才去处理;2.没有很好的利用Qt的drag drop事件接口,后期可以尝试下;3.QTabWidget很多默认的效果不大好,比如TabBar占据宽度居然是根据页签总宽而不是TabWidget占的宽度,这样判断区域也不方便,还有Tab页过多时的左右按钮也不好用,如果时间足够的话,最好重写)

    主要代码片段:

    void MyTabBar::mousePressEvent(QMouseEvent *event)
    {
        QTabBar::mousePressEvent(event);
        if(event->button()==Qt::LeftButton&&currentIndex()>=0)
        {
            //保存状态
            //pressPos=event->pos();
            theDragPress=true;
        }
    }
    
    void MyTabBar::mouseMoveEvent(QMouseEvent *event)
    {
        QTabBar::mouseMoveEvent(event);
    
        //move的时候button为NoButton,但是button's里有
        if(theDragPress&&event->buttons())
        {
            //是否脱离了tabbar的范围
            if(!theDragOut&&!contentsRect().contains(event->pos())){
                theDragOut=true;
                emit beginDragOut(this->currentIndex());
    
                //QDrag.exec后就不会触发release了,自己手动触发
                //不过他好像还是在鼠标弹起之后才会进行动画,待解决
                QMouseEvent *e=new QMouseEvent(QEvent::MouseButtonRelease,
                                                  this->mapFromGlobal(QCursor::pos()),
                                                   Qt::LeftButton,
                                                   Qt::LeftButton,
                                                   Qt::NoModifier);
                //mouseReleaseEvent(event);
                QApplication::postEvent(this,e);
            }
        }
    }
    
    void MyTabBar::mouseReleaseEvent(QMouseEvent *event)
    {
        QTabBar::mouseReleaseEvent(event);
        theDragPress=false;
        theDragOut=false;
    }
    void MyTabWidget::initTabBar()
    {
        MyTabBar *bar=new MyTabBar(this);
        //setTabBar是protected成员函数,要使用就得继承
        setTabBar(bar);
        //点击页签上的关闭按钮时,触发信号
        connect(bar,&QTabBar::tabCloseRequested,this,&MyTabWidget::removeNormalIndex);
        //拖拽到外部-还未释放鼠标
        connect(bar,&MyTabBar::beginDragOut,this,[this,bar](int index){
            if(!indexValid(index))
                return;
            QWidget *drag_tab=this->widget(index);
            //固定tab就不让拖出
            if(!drag_tab||fixedPage.contains(drag_tab))
                return;
            //把当前页作为快照拖拽
            //尺寸加了标题栏和边框
            QPixmap pixmap(drag_tab->size()+QSize(2,31));
            pixmap.fill(Qt::transparent);
            QPainter painter(&pixmap);
            if(painter.isActive())
            {
                //这里想做标题栏贴在内容之上
                //但是没法获取默认标题栏的图像啊,就随便画一个矩形框
                //如果设置了外部主题颜色,需要改下
                QRect title_rect{0,0,pixmap.width(),30};
                painter.fillRect(title_rect,Qt::white);
                painter.drawText(title_rect,Qt::AlignLeft|Qt::AlignVCenter,"  "+drag_tab->windowTitle());
                painter.drawRect(pixmap.rect().adjusted(0,0,-1,-1));
            }
            painter.end();
            drag_tab->render(&pixmap,QPoint(1,30));
    
            QMimeData *mime=new QMimeData;
            QDrag *drag=new QDrag(bar);
            drag->setMimeData(mime);
            drag->setPixmap(pixmap);
            drag->setHotSpot(QPoint(10,0));
    
            //鼠标弹起后drag就释放了,这时候去判断是否拖拽到了外部
            connect(drag,&QDrag::destroyed,this,[=]{
                QPoint bar_point=bar->mapFromGlobal(QCursor::pos());
                //不在范围,拖出
                if(!bar->contentsRect().contains(bar_point)){
                    popPage(drag_tab);
                }
            });
    
            drag->exec(Qt::MoveAction);
        });
    }
    
    void MyTabWidget::popPage(QWidget *page)
    {
        takeNormalPage(page);
        //这里套一个自定义标题栏的窗口给page
        MyTabPopup *pop=new MyTabPopup(this);
        pop->setAttribute(Qt::WA_DeleteOnClose);
        pop->setContentWidget(page);
        pop->setWindowTitle(page->windowTitle());
        pop->resize(page->size());
        //拖出来的位置有点偏移
        pop->move(QCursor::pos()-QPoint(10,10));
    
        //判断独立窗口是否拖回tab
        connect(pop,&MyTabPopup::dragRelease,this,[=](const QPoint &pos){
            const QPoint bar_pos=tabBar()->mapFromGlobal(pos);
            //如果又拖回了tabbar范围内,就把widget取出来放回tab
            if(tabBar()->contentsRect().contains(bar_pos))
            {
                QWidget *content=pop->getContentWidget();
                this->appendNormalPage(content);
                pop->disconnect();
                //关闭的时候会在原来的位置闪一下?
                pop->close();
                //this->activateWindow();
            }
        });
        pop->show();
        page->show();
        pop->activateWindow();
        pop->setFocus();
    }
    

     

    展开全文
  • setStyleSheet("QTabWidget::pane{border-width:1px;border-color:rgb(48, 104, 151);\border-style: outset;background-color: rgb(132, 171, 208);\background: transparent;} \QTabWidget::tab-bar{border-width:...
  • QT界面美化之QTabWidget

    2021-06-26 18:25:01
    二、修改背景色: 首先我们需要知道QTabWidget结构: //(1)QTabWidget显示区域的属性设置 QTabWidget::pane { border-top: 1px solid #E5E5E5; border-left:1px solid #E5E5E5; position: absolute; font-size: ...
  • QTabWidget的使用

    2021-02-06 20:37:46
    利用QTabWidget打开多个窗口并且可以切换,实现类似浏览器上方的页签切换效果
  • QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); //设置页面的提示信息. 3.void setTabEnabled(bool); //设置页面是否被激活. 4.void ...
  • QTabWidget.rar

    2021-10-25 15:43:02
    QTabWidget动态增加选项卡、动态删除选项卡及动态释放选项卡内存

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,824
精华内容 1,129
关键字:

qtabwidget