Wysota, thanks for the tip! I got the basics of it working perfect. I figured I would show part of my code just incase anyone needs it in the future. Please let me know if you see any potential problems with it:
{
public:
TabWidget(Widget *parent=0);
}
{
Q_OBJECT
public:
protected:
QSize tabSizeHint
(int index
) const;
private:
TabWidget *tabWidget;
}
{
pParent = parent;
tabWidget = (TabWidget*) pParent;
}
{
int count = this->count() -1;
for (int i=0; i< count; i++)
{
r = this->tabRect(i);
p.
drawPixmap(r.
right()-22, r.
top()+5,
QPixmap(":/icons/x.png");
}
r = this->tabRect(count);
p.
drawPixmap(r.
left()+4, r.
top()+5,
QPixmap(":/icons/add.png"));
}
void Tab::tabSizeHint(int index) const
{
if (tabWidget->tabText(index) == "")
size.setWidth(size.width() + 2);
else
size.setWidth(size.width() + 32);
return size;
}
{
for (int i=0; i < this->count()-1; i++)
{
r = this->tabRect(i);
if ((event->x() >= r.right()-22) && (event->x() <= r.right()-8))
{
...
tabWidget->removeTab(i);
return;
...
}
}
}
{
Tab *bar = new Tab(this);
setTabBar(bar);
}
class TabWidget : public QTabWidget
{
public:
TabWidget(Widget *parent=0);
}
class Tab : public QTabBar
{
Q_OBJECT
public:
Tab(QWidget *parent=0);
protected:
void paintEvent(QPaintEvent *event);
QSize tabSizeHint(int index) const;
void mousePressEvent(QMouseEvent *event);
private:
QWidget *pParent;
TabWidget *tabWidget;
}
Tab::Tab(QWidget *parent) : QTabBar(parent)
{
pParent = parent;
tabWidget = (TabWidget*) pParent;
}
void Tab::paintEvent(QPaintEvent *event)
{
QTabBar::paintEvent(event);
QPainter p(this);
QRect r;
int count = this->count() -1;
for (int i=0; i< count; i++)
{
r = this->tabRect(i);
p.drawPixmap(r.right()-22, r.top()+5, QPixmap(":/icons/x.png");
}
r = this->tabRect(count);
p.drawPixmap(r.left()+4, r.top()+5, QPixmap(":/icons/add.png"));
}
void Tab::tabSizeHint(int index) const
{
QSize size = QTabBar::tabSizeHint(index);
if (tabWidget->tabText(index) == "")
size.setWidth(size.width() + 2);
else
size.setWidth(size.width() + 32);
return size;
}
void Tab::mousePressEvent(QMouseEvent *event)
{
QRect r;
for (int i=0; i < this->count()-1; i++)
{
r = this->tabRect(i);
if ((event->x() >= r.right()-22) && (event->x() <= r.right()-8))
{
...
tabWidget->removeTab(i);
return;
...
}
}
QTabBar::mousePressEvent(event);
}
TabWidget::TabWidget(QWidget *Parent) : QTabWidget(parent)
{
Tab *bar = new Tab(this);
setTabBar(bar);
}
To copy to clipboard, switch view to plain text mode
Thanks!
Bookmarks