新版本的QQ聊天窗口可以实现拖动,分离出新的窗口。浏览器等软件也可以实现类似操作。所以心血来潮想用Qt实现类似的功能。想用QTabWidget直接实现是很难的,仔细阅读源码,发现QTabWidget内部是由QStackedWidget和QTabBar组合实现的。所以很自然的想到,只要继承QTabBar的子类重新实现QTabBar的
void mousePressEvent (QMouseEvent *e);
void mouseMoveEvent (QMouseEvent *e);
void mouseReleaseEvent (QMouseEvent *e);
这三个方法,再把子定义的TabBar设置给QTabWidget就差不多了。但是还有个问题,QTabWidget的 setTabBar方法是protected的,所以只好再自定义一个QTabWidget的子类,在子类里调用setTabBar了。以下是我的简单实现:
class myTabBar:public QTabBar
{
Q_OBJECT
public:
myTabBar(QWidget *parent = NULL);
~myTabBar();
protected:
void mousePressEvent (QMouseEvent *e);
void mouseMoveEvent (QMouseEvent *e);
void mouseReleaseEvent (QMouseEvent *e);
signals:
void starDragTab(int index);
void endDragTab();
private:
void drag();
bool m_isDrag;
QPoint m_mousePressPoint;
QPoint m_mouseReleasePoint;
};
</