Seite 1 von 1
ein externen tab in einen globalen tab adden per pushButton
Verfasst: 20. November 2006 16:00
von defenderLQ
hallo
1. Ich habe 2 verschiedene tabs das erste ist im mainwindow als Globales
tab im MainWindow.ui erstellt
und 2. eine weiteren tab extern im GroupsTab.ui
ich will per Button klick den externen tab in meinem Globalen tab angehängt haben.
Nun klappt es leider noch nicht mit:
Code: Alles auswählen
connect( ui.Buttonok, SIGNAL(clicked()), this, SLOT(addgrouptab()));
[/b]
später wenn das klappen sollte, soll es per
removeTab() wieder den tab entfernen.
hier mein sourcen:
Code: Alles auswählen
#include "JoinDialog.h"
#include "gui/groups/GroupsTab.h"
#include <QTabWidget>
/* Define the format used for displaying the date and time */
#define DATETIME_FMT "MMM dd hh:mm:ss"
/** Default constructor */
JoinDialog::JoinDialog(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
/* Invoke Qt Designer generated QObject setup routine */
ui.setupUi(this);
connect( ui.Buttonok, SIGNAL(clicked()), this, SLOT(addgrouptab()));
}
void
JoinDialog::show()
{
//loadSettings();
if(!this->isVisible()) {
QDialog::show();
}
}
void JoinDialog::addgrouptab()
{
tabWidget = new QTabWidget;
tabWidget->addTab(new GroupsTab(), tr("General"));
}
mein header dazu:
Code: Alles auswählen
#include <QtGui>
#ifndef _JOINDIALOG_H
#define _JOINDIALOG_H
#include "ui_JoinDialog.h"
class JoinDialog : public QDialog
{
Q_OBJECT
public:
/** Default constructor */
JoinDialog(QWidget *parent = 0, Qt::WFlags flags = 0);
/** Default destructor */
public slots:
/** Overloaded QWidget.show */
void show();
protected:
void closeEvent (QCloseEvent * event);
private slots:
void addgrouptab();
private:
QTabWidget *tabWidget;
Ui::JoinDialog ui;
};
#endif
vom MainWindow.ui tab heist "tabWidget":
vom GroupTab.ui tab heist:"grouptabWidget"
das
GroupsTab.ui befindet sich unter gui/groups/GroupTabs.ui/
das
MainWindow.ui befindet such unter gui/MainWindow.ui/
mein
JoinDialog.cpp/h befindet sich unter gui/join/JoinDialog.cpp/.h
nun habe ich nirgends was gelesen wie man von einem .ui das tab hinzufügen kann in einem mainwindow tab?
Verfasst: 20. November 2006 23:10
von defenderLQ
kennt sich keiner aus mit tabs?
ich hoffe ich habe mein problem gut geschildert?
Verfasst: 21. November 2006 11:00
von Burgpflanze
Eher wohl
Code: Alles auswählen
void JoinDialog::addgrouptab()
{
ui.tabWidget->addTab(new GroupsTab(), tr("General"));
}
Verfasst: 21. November 2006 11:41
von defenderLQ
hi
also normal brauch ich nicht die ui. ich kann beides anwenden.
dann muss ich mein Dialog anpassen damit es vorne ui. immer steht.
nun stürzt mein gui ab wenn ich auf den buttonok klicke.
die includes im .cpp:
Code: Alles auswählen
#include "JoinDialog.h"
#include "gui/groups/GroupsTab.h"
#include "gui/MainWindow.h"
#include <QTabWidget>
das hier bringt zum absturz des guis:
Code: Alles auswählen
void JoinDialog::addgrouptab()
{
tabWidget->addTab(new GroupsTab(), tr("General"));
}
nun kann ins MainWindow ein GroupTab abgehängt werden damit überhaupt?
Verfasst: 23. November 2006 19:42
von defenderLQ
nun habe ich es so probiert:
Code: Alles auswählen
void JoinDialog::addgrouptab()
{
ui.tabWidget->addTab(ui.grouptabWidget , tr("General"));
}
nun ich habe so gedacht:
ins tabWidget im MainWindow wird grouptabWidget geaddet oder?
nun ein fehler:
gui\join\JoinDialog.cpp: In member function `void JoinDialog::addgrouptab()':
gui\join\JoinDialog.cpp:80: error: 'class Ui::JoinDialog' has no member named 'g
rouptabWidget'
gui\join\JoinDialog.cpp:80: error: 'class Ui::JoinDialog' has no member named 't
abWidget'
ich habe doch die include richtig angeben und es findet es nicht?
Verfasst: 25. November 2006 20:29
von defenderLQ
nun bin ich weiter aber der tab kommt nicht in tabwidget rein sondern
in ein neues.
wenn ich das aktiviere wird das addgroup hier ausgeführt:
also meine andere tab function kann ins statische tab.
aber es hat nicht die function das die dazuhörige widget noch anzeigt und close tab.
Code: Alles auswählen
tabWidget = new GroupsTabWidget(this);
//tabWidget->removeTab(0);
//setCentralWidget(tabWidget);
/** is for closing the active Tab when works! when get errors then disable it**/
connect(ui.tabWidget, SIGNAL(closeButtonClicked()), SLOT(closeActiveTab()));
connect(ui.tabWidget, SIGNAL(currentChanged(int)), SLOT(activeTabChanged(int)));
#if defined(OS_MACOSX)
// Add the close tab widget
CloseGroupTabWidget * closeTabWidget = new CloseGroupTabWidget(ui.toolBar);
ui.toolBar->addWidget(closeTabWidget);
connect(closeTabWidget, SIGNAL(clicked()), SLOT(closeActiveTab()));
////
#endif
//Telling users to send errors...
cout<<"\nIf you see any errors below this line, send it to developers.\n---------------------------------------------------------------"<<endl;
}
Code: Alles auswählen
/** Testing if tabs works but at the moment without any groupwidget**/
void MainWindow::addatab()
{
GroupsTabWidget * groupsTabWidget;
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
groupsTabWidget = (GroupsTabWidget *) ui.tabWidget->widget(i);
//qtContactCallListWidget->addPhoneCall(qtPhoneCall);
ui.tabWidget->setCurrentWidget(groupsTabWidget);
return;
}
}
activeTabBeforeCall = ui.tabWidget->currentWidget();
//tab not found, create a new one
groupsTabWidget = new GroupsTabWidget();
ui.tabWidget->addTab(groupsTabWidget, tr("first tab"));
ui.tabWidget->setCurrentWidget(groupsTabWidget);
}
/** testing tab, this function must be open a new tab with the GroupsWidget**/
void MainWindow::addgroup()
{
QString groupname = "new group";
int tabNumber;
groupsWidget = new GroupsWidget(tabWidget, tabWidget);
if (tabWidget->count() > 0) {
tabNumber = tabWidget->insertTab(tabWidget->count(), groupsWidget, groupname);
} else {
tabNumber = tabWidget->insertTab(0, groupsWidget, groupname);
}
//if (session->isUserCreated()) {
tabWidget->setCurrentIndex(tabNumber);
//}
setWindowTitle(tabWidget->tabText(tabNumber));
}
GroupsWidget * MainWindow::getActiveTabWidget()
{
return dynamic_cast<GroupsWidget *>(tabWidget->widget(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 = tabWidget->indexOf(widget);
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
activeTabChanged(tabWidget->currentIndex());
#endif
////
}
nun wo hab ich was falsch gemacht?
Verfasst: 26. November 2006 14:24
von defenderLQ
wenn ich mein addgroup erweitere:
Code: Alles auswählen
tabWidget = new GroupsTabWidget(this);
tabWidget->removeTab(0);
setCentralWidget(tabWidget);
dann wird mein tabWidget vom .ui von der neuen überdeckt
bei nem klick auf add Tab button.
Code: Alles auswählen
void MainWindow::addgroup()
{
tabWidget = new GroupsTabWidget(this);
tabWidget->removeTab(0);
setCentralWidget(tabWidget);
QString groupname = "new group";
int tabNumber;
groupsWidget = new GroupsWidget(tabWidget, tabWidget);
if (tabWidget->count() > 0) {
tabNumber = tabWidget->insertTab(tabWidget->count(), groupsWidget, groupname);
} else {
tabNumber = tabWidget->insertTab(0, groupsWidget, groupname);
}
//if (session->isUserCreated()) {
tabWidget->setCurrentIndex(tabNumber);
//}
setWindowTitle(tabWidget->tabText(tabNumber));
}
ich will anhängen und nicht darauf.
Verfasst: 27. November 2006 12:19
von Christian81
Ich kenn mich damit leider nicht gut mit aus. Allerdings würde ich
a) immer addTab nehmen - Du emulierst ja quasi addTab
b) mir mal das Beispiel in qt-4/examples/dialogs/tabdialog anschauen - evtl. findest du dort ja was.
c) anstatt ein eigenes TabWidget einfach mal QWidget nehmen -> tabWidget->addTab(new QWidget, "Testwidget") und schauen was passiert. Damit kannst Du dann zumindest ein paar Fehlerquellen ausschliessen.
Verfasst: 27. November 2006 14:42
von defenderLQ
hi
nun habe ich es doch hinbekommen leider wird jetzt das closebutton nicht mehr angezeigt .
ich hatte gedacht es geht nur mit insertTab
Code: Alles auswählen
/** testing tab methods**/
void MainWindow::addGroup2()
{
tabWidget = new GroupsTabWidget(this);
tabWidget->removeTab(0);
//setCentralWidget(tabWidget);
QString groupname = "group2";
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);
}
danke für die infos.
Also ich hatte schon den tabdialog example schon vor paar tagen angeschaut.