[gelöst] QTabbedWidget: Es werden zu viele Tabs entfernt
Verfasst: 18. Dezember 2008 10:57
Hallo,
ich habe eine Klasse von QTabbedWidget abgeleitet und folgende Operationen neu implementiert:
Dadurch möchte ich erreichen, dass man, wenn man mittels eines Clicks mit der mittleren Maustaste auf ein beliebiges Tab dieses Tab schließen kann. Das funktioniert soweit auch, allerdings wird nicht nur das gewünschte Tab, sondern auch das direkt rechts daneben geschlossen ^^. Also wenn ich z.B. 3 Tabs offen haben und auf das ganz linke klicke, wird dieses und das zweite von links geschlossen.
Kann mir bitte jemand erklären was ich falsch gemacht habe?
Gruß M@g
ich habe eine Klasse von QTabbedWidget abgeleitet und folgende Operationen neu implementiert:
Code: Alles auswählen
void OperationTabsContainer::mousePressEvent(QMouseEvent *pEvent)
{
if(pEvent->button() == Qt::MidButton)
{
QPoint oPos = pEvent->pos();
QTabBar *pTabBar = this->tabBar();
if(pTabBar != NULL)
{
int iTabIdx = pTabBar->tabAt(oPos);
if(iTabIdx != -1)
{
removeTab(iTabIdx);
}
else
{
LOG_ERROR_1("Could not determine TabIndex.");
}
}
else
{
LOG_ERROR_1("Could not get TabBar.");
}
}
else
{
//no need to handle event here
}
QTabWidget::mousePressEvent(pEvent);
}
int OperationTabsContainer::addTab(QWidget *pChild, const QString &oLabel)
{
int iTabIdx = QTabWidget::addTab(pChild,oLabel);
if(iTabIdx >= 0)
{
m_oChildToRemoveMapper.setMapping(pChild,iTabIdx);
m_oChildToUpdateMapper.setMapping(pChild,iTabIdx);
bool bResult = false;
bResult = connect(pChild, SIGNAL(okBtnClicked()), &m_oChildToRemoveMapper, SLOT(map()));
bResult = connect(pChild, SIGNAL(attributeChanged()), &m_oChildToUpdateMapper, SLOT(map()));
}
else
{
LOG_ERROR_1("Could not add tab.");
}
return iTabIdx;
}
void OperationTabsContainer::removeTab(int iIndex)
{
QWidget *pWidget = widget(iIndex);
if(pWidget != NULL)
{
OperationTab *pTab = static_cast<OperationTab*>(pWidget);
if(pTab->getImplementationChanged() == true)
{
//TODO ask user if changes should be applied
}
delete pTab;
QTabWidget::removeTab(iIndex);
}
else
{
LOG_ERROR_2("Could not get Widget at index ", static_cast<qint32>(iIndex));
}
}
Kann mir bitte jemand erklären was ich falsch gemacht habe?
Gruß M@g