QTabWidget: kleines Icon in der rechten Ecke
QTabWidget: kleines Icon in der rechten Ecke
Hallo,
ich habe ein QTabWidget in mein QMainWindow eingebaut. Nun hätte ich gerne in der rechten oberen Ecke, also auf Höhe der Tabs ein Icon (bzw eine QAction) mit dem ich das aktuelle Tab schließen kann. Es soll genauso wie z.B. im Firefox aussehen. Hat jemand eine Ahnung wie man das macht? Ich habe mir die Klassenreferenz von TabWidget und TabBar bereits angesehen, habe aber nichts gefunden, was mir weiter hilft.
Danke schon mal,
Grüße,
Isa
P.S. Ich benutze Qt 4.1.4 Commercial Edition
ich habe ein QTabWidget in mein QMainWindow eingebaut. Nun hätte ich gerne in der rechten oberen Ecke, also auf Höhe der Tabs ein Icon (bzw eine QAction) mit dem ich das aktuelle Tab schließen kann. Es soll genauso wie z.B. im Firefox aussehen. Hat jemand eine Ahnung wie man das macht? Ich habe mir die Klassenreferenz von TabWidget und TabBar bereits angesehen, habe aber nichts gefunden, was mir weiter hilft.
Danke schon mal,
Grüße,
Isa
P.S. Ich benutze Qt 4.1.4 Commercial Edition
Code: Alles auswählen
QTabWidget::setCornerWidget(QWidget *widget, Qt::Corner corner=Qt::TopRightCorner)
Hallo upsala,
danke für deine schnelle Antwort, aber leider funtioniert es nicht so ganz. Ich weiß nämlich nicht, welches Widget ich da einsetzen soll. Ich habe es jetzt mit einem QToolButton versucht, aber der wird nicht angezeigt, weder mit Text noch mit einem Icon. Eine QAction kann ich ja nicht einsetzen. Hier ist mein Code, vielleicht mach ich ja irgendwas falsch:
Oder gibt es ein spezielles Widget, das besser dafür geeignet ist?
Nochmal danke für deine Hilfe,
Isa
danke für deine schnelle Antwort, aber leider funtioniert es nicht so ganz. Ich weiß nämlich nicht, welches Widget ich da einsetzen soll. Ich habe es jetzt mit einem QToolButton versucht, aber der wird nicht angezeigt, weder mit Text noch mit einem Icon. Eine QAction kann ich ja nicht einsetzen. Hier ist mein Code, vielleicht mach ich ja irgendwas falsch:
Code: Alles auswählen
tabWidget = new QTabWidget(this);
deleteButton = new QToolButton(this);
deleteButton->setIcon(QIcon(":/icon_delTab.png"));
tabWidget->setCornerWidget(deleteButton);
setCentralWidget(tabWidget);
Nochmal danke für deine Hilfe,
Isa
-
defenderLQ
- Beiträge: 156
- Registriert: 27. Juli 2006 20:53
hi
so ein problem hab ich auch ich kann mein tabs nicht schliesen...
ich habe ein globalen tab im mainwindow und da werden die
tabs angehängt aber ich kann es nicht mehr schliessen
so ein problem hab ich auch ich kann mein tabs nicht schliesen...
ich habe ein globalen tab im mainwindow und da werden die
tabs angehängt aber ich kann es nicht mehr schliessen
Code: Alles auswählen
/** testing tab methods**/
void MainWindow::addGroup()
{
tabWidget = new GroupsTabWidget(this);
deleteButton = new QToolButton(tabWidget);
deleteButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
//setCentralWidget(tabWidget);
QString groupname = "Testing group";
int nbtab = ui.tabWidget->count();
for (int i = 0; i < nbtab; i++) {
if (ui.tabWidget->tabText(i) == QString(tr("first tab"))) {
//i is the index of the group tab
groupsWidget = (GroupsWidget *) ui.tabWidget->widget(i);
ui.tabWidget->setCurrentWidget(groupsWidget);
return;
}
}
activeTabBeforeCall = ui.tabWidget->currentWidget();
groupsWidget = new GroupsWidget(ui.tabWidget, tabWidget);
ui.tabWidget->addTab(groupsWidget, groupname);
ui.tabWidget->setCurrentWidget(groupsWidget);
}
GroupsWidget * MainWindow::getActiveTabWidget()
{
return dynamic_cast<GroupsWidget *>(ui.tabWidget->widget(ui.tabWidget->currentIndex()));
}
void MainWindow::activeTabChanged(int index)
{
tabWidget->stopBlinkingTab(index);
setWindowTitle(tabWidget->tabText(tabWidget->currentIndex()));
}
/** function to close the Active tab which is selected**/
void MainWindow::closeActiveTab()
{
GroupsWidget *widget = getActiveTabWidget();
int widgetPos = ui.tabWidget->indexOf(widget);
ui.tabWidget->removeTab(widgetPos);
delete(widget);
//if (tabWidget->count() == 0) {
//}
// work around a Qt bug under Windows:
// currentChanged is not emitted when removeTab is called
//#ifdef OW_WINDOWS // IS THIS REALLY RIGHT?
//activeTabChanged(ui.tabWidget->currentIndex());
//#endif
////
}Weiß jetzt nicht, ob meine PN angekommen ist. Zur Sicherheit hier nochmal:
Hi,
hab gerade deine Antwort im Forum gelesen. Hmm... so ähnlich wie du in closeActiveTab() habe ich es eigentlich auch gemacht. Der einzige Unterschied, der mir jetzt auffällt ist, dass du kein close aufrufst sondern das widget deletest nachdem du es aus dem TabWidget genommen hast. Versuch es vll. mal mit widget->close().
Oh und da fällt mir noch was auf: Du holst das aktuelle Widget mit getActiveTabWidget() und speicherst es in einer lokalen Variablen widget. Wenn du nun delete auf widget aufrufst, dann zerstörst du nur die lokale Kopie aber nicht das Tab selbst. Besser wäre vielleicht sowas: delete(getActiveTabWidget()) (wenn das geht) oder eben
getActiveTabWidget()->close(). Das war zumindest bei mir mal der Fall.
Was ich nicht ganz verstehe ist, was meinst du mit globales Tab?
Ich hoffe ich konnte dir etwas helfen.
Grüße,
Isa
Hi,
hab gerade deine Antwort im Forum gelesen. Hmm... so ähnlich wie du in closeActiveTab() habe ich es eigentlich auch gemacht. Der einzige Unterschied, der mir jetzt auffällt ist, dass du kein close aufrufst sondern das widget deletest nachdem du es aus dem TabWidget genommen hast. Versuch es vll. mal mit widget->close().
Oh und da fällt mir noch was auf: Du holst das aktuelle Widget mit getActiveTabWidget() und speicherst es in einer lokalen Variablen widget. Wenn du nun delete auf widget aufrufst, dann zerstörst du nur die lokale Kopie aber nicht das Tab selbst. Besser wäre vielleicht sowas: delete(getActiveTabWidget()) (wenn das geht) oder eben
getActiveTabWidget()->close(). Das war zumindest bei mir mal der Fall.
Was ich nicht ganz verstehe ist, was meinst du mit globales Tab?
Ich hoffe ich konnte dir etwas helfen.
Grüße,
Isa
-
defenderLQ
- Beiträge: 156
- Registriert: 27. Juli 2006 20:53
-
defenderLQ
- Beiträge: 156
- Registriert: 27. Juli 2006 20:53
nun ich kann bei mir was aktivieren aber der close button
erscheint nicht im ui.tabwidget sondern es kommt ein neuer
tabwidget und sieht man das da ein close button funktioniert.

und wenn ich ui.tabWidget = new GroupsTabWidget deaktiviere

erscheint nicht im ui.tabwidget sondern es kommt ein neuer
tabwidget und sieht man das da ein close button funktioniert.

Code: Alles auswählen
/** Constructor */
MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
/* Invoke the Qt Designer generated QObject setup routine */
ui.setupUi(this);
activeTabBeforeCall = NULL;
ui.tabWidget = new GroupsTabWidget(this);
ui.tabWidget->removeTab(1);
//setCentralWidget(tabWidget);
connect(ui.tabWidget, SIGNAL(closeButtonClicked()), SLOT(closeActiveTab()));
connect(ui.tabWidget, SIGNAL(currentChanged(int)), SLOT(activeTabChanged(int)));
#if defined(OS_MACOSX) //why mac defined?
// Add the close tab widget
CloseGroupTabWidget *closeTabWidget = new CloseGroupTabWidget(ui.toolBar);
ui.toolBar->addWidget(closeTabWidget);
connect(closeTabWidget, SIGNAL(clicked()), this, SLOT(closeActiveTab()));
////
#endif
}und wenn ich ui.tabWidget = new GroupsTabWidget deaktiviere
Code: Alles auswählen
//ui.tabWidget = new GroupsTabWidget(this);
ui.tabWidget->removeTab(1);

Code: Alles auswählen
void MainWindow::addGroup()
{
tabWidget = new GroupsTabWidget(this);
//setCentralWidget(tabWidget);
QString groupname = "Testing group";
int nbtab = ui.tabWidget->count();
for (int i = 0; i < nbtab; i++) {
if (ui.tabWidget->tabText(i) == QString(tr("first tab"))) {
//i is the index of the conference tab
groupsWidget = (GroupsWidget *) ui.tabWidget->widget(i);
ui.tabWidget->setCurrentWidget(groupsWidget);
return;
}
}
activeTabBeforeCall = ui.tabWidget->currentWidget();
groupsWidget = new GroupsWidget(ui.tabWidget, tabWidget);
ui.tabWidget->addTab(groupsWidget, groupname);
ui.tabWidget->setCurrentWidget(groupsWidget);
}
GroupsWidget * MainWindow::getActiveTabWidget()
{
return dynamic_cast<GroupsWidget *>(ui.tabWidget->widget(ui.tabWidget->currentIndex()));
}
void MainWindow::activeTabChanged(int index)
{
tabWidget->stopBlinkingTab(index);
setWindowTitle(tabWidget->tabText(tabWidget->currentIndex()));
}
/** function to close the Active tab which is selected**/
void MainWindow::closeActiveTab()
{
GroupsWidget *widget = getActiveTabWidget();
int widgetPos = ui.tabWidget->indexOf(widget);
ui.tabWidget->removeTab(widgetPos);
//delete(getActiveTabWidget());
delete(widget);
//getActiveTabWidget()->close();
//if (tabWidget->count() == 0) {
//}
// work around a Qt bug under Windows:
// currentChanged is not emitted when removeTab is called
//#ifdef OW_WINDOWS // IS THIS REALLY RIGHT?
//activeTabChanged(ui.tabWidget->currentIndex());
//#endif
////
}