den inhalt der tabs stellt dann die andere klasse dar.
also: unit_type_HQ == Inhalt und MyBoardWDG == tabelle und tabs
so mein problem ist, das ich mich noch nicht so in der qt-programmieruung auskenne und auch in sachen oop nicht felsenfest bin... deshalb hab ich einige kleinere und größere schwierigkeiten.
zum beispiel will ich einige daten aus der klasse die den inhalt der tabs zeichnet in die tabelle der anderen klasse packen, das wären dann QStrings. die funktionen dafür habe ich schon gemacht. sind aber ungetestet und wie gesagt ich weiß nicht wie ich die daten übertragen soll. zuerst habe ich an vererbung gedacht, ich bekomm aber merkwürdige compilerfehler.
zudem habe ich an templates gedacht aber die werden nicht unterstützt.
dann hatte ich diverse probleme bei der vorwärts-deklaration von klassen und bei der projekt-unterteilung in mehrere dateien, ebenfalls mit compiler-fehler verbunden.
bevor ich jedoch meinen ziemlich unübersichtlichen code poste wollte ich mein primären problem ausführen.
in einer member-fkt. von der klasse die den tab-inhalt zeichnet will ich per
Code: Alles auswählen
QObject::connect(addUnit_But, SIGNAL(clicked() ), this, SLOT(start_classfkt() ) );Code: Alles auswählen
void start_classfkt()
{
QString UName = get_unit_name_combobox();
QStringList equipment = get_EquipList();
MyBoardWDG ::addToArmeeList(UName, equipment);/ PROBLEM
}so jetzt poste ich den gesamten code, falls jemand nicht weiß was ein entsprechender abschnitt macht, einfach mal posten.
Code: Alles auswählen
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <QtGui>
#include <iostream>
#include "text_reader.hpp"
enum armee_bereich //für MyBoardWDG klasse
{
HQ,
Elite,
Standard,
Sturm,
Unterstuetzung
};
class unit_type_HQ : public QWidget
{
Q_OBJECT
private:
int price;
int mod_e_price;
QStringList EquipList;
QPushButton *addUnit_But;
QComboBox *unit_name_combobox;
QLabel *label_unit_name;
QLabel *label_unit_pt;
QTableWidget *unit_profile_table; //QGroupBox *horizontalGroupBox_profile;
QListWidget *unit_equipment_list; //QGroupBox *verticalGroupBox_equip;
QLabel *unit_price_label; //void setUnit_price_label();
QStringList pre_conf_units;
QStringList pre_conf_profile;
QStringList pre_conf_equipment;
static const int rows = 2, columns = 9;
public:
QStringList get_EquipList()
{
return EquipList;
}
QString get_unit_name_combobox()
{
return unit_name_combobox->currentText();
}
unit_type_HQ(QWidget *parent = 0, QStringList units = 0, QStringList equipment = 0); // zeichnet den inhalt des tabs (darunterliegende fkt. eingeschlossen)
virtual ~unit_type_HQ()
{
}
QGroupBox *verticalGroupBox_equip;
void createVerticalGroupBox_equip(); //teil des tabs der aurüstungsgegenstände auflistet
QGroupBox *horizontalGroupBox_profile;
void createHorizontalGroupBox_profile(); //teil des tabs der das profil darstellt
void setProfileTable(QString); //füllt die tabelle in horizontalGroupBox_profile mit profildaten; wird per slot (unten) aufgerufen)
void setEquipList(QStringList); //füllt liste in verticalGroupBox_equip mit ausrüstung; wird auch per slot aufgerufen
static const int width = 350; //breite von widgets im tab
static const int height = 92; //höhen von ...
public slots:
void setUnitProfile(QString name) //füllt tabelle; connections im entspr. layout
{
QString str = read_profile("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", name);
setProfileTable(str);
std::cout<<"Profil gesetzt von "<<name.toStdString()<<" mit: "<<str.toStdString()<<std::endl;
}
void setUnitEquipment(QString name = "all") //füllt liste; connections im entspr. layout
{
name = name.section('\t', 0, 0);
name = "#"+name+"#";
QStringList str_lst = read_elist("equip.src", "/home/dgdaniel/develop/Qt/dgd/src/", name);
setEquipList(str_lst);
}
void saveSelectedEquipment() //speichert ausgewählte ausrüstung in QStringList ;manipuliert auch den preis im bezug auf ausrüstung
{
EquipList.clear();
std::cout<<"Speichere Equipmentauswahl."<<std::endl;
QList<QListWidgetItem*> selectedEquipItems;
selectedEquipItems = unit_equipment_list->selectedItems();
std::cout<<selectedEquipItems.size()<<" Items ausgewaehlt."<<std::endl;
for(int i = 0; i < selectedEquipItems.size(); i++)
{
QListWidgetItem *item = selectedEquipItems.at(i);
QString item_txt = item->text();
std::cout<<"Speichere: "<<item_txt.toStdString()<<std::endl;
EquipList.append(item_txt);
}
mod_e_price = price;
mod_e_price += getPrice(0, EquipList, true);
std::cout<<mod_e_price<<std::endl;
unit_price_label->setText(QString::number(mod_e_price, 10) );
}
void setUnit_price(QString UName) // preis nur im bezug auf figur
{
price = getPrice(UName, EquipList, false);
unit_price_label->setText(QString::number(price, 10) );
std::cout<<price<<std::endl;
}
void start_classfkt()
{
QString UName = get_unit_name_combobox();
QStringList equipment = get_EquipList();
//addToArmeeList(UName, equipment);
}
};
/*######################################################################################*/
unit_type_HQ::unit_type_HQ(QWidget *parent, QStringList units, QStringList equipment)
: QWidget(parent), pre_conf_units(units), pre_conf_equipment(equipment)
{
label_unit_name = new QLabel(tr("Name der Einheit:"));
label_unit_pt = new QLabel(tr("Kosten:"));
//einheit
unit_name_combobox = new QComboBox(this);
unit_name_combobox->addItems(pre_conf_units);
//profil-tabelle
unit_type_HQ::createHorizontalGroupBox_profile();
//Ausrüstung
unit_type_HQ::createVerticalGroupBox_equip();
//Kosten
unit_price_label = new QLabel();
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(label_unit_name);
mainLayout->addWidget(unit_name_combobox);
mainLayout->addWidget(horizontalGroupBox_profile);
mainLayout->addWidget(verticalGroupBox_equip);
mainLayout->addWidget(label_unit_pt);
mainLayout->addWidget(unit_price_label);
setLayout(mainLayout);
}
/*######################################################################################*/
void unit_type_HQ::createHorizontalGroupBox_profile()
{
horizontalGroupBox_profile = new QGroupBox(tr("Profil:") );
QHBoxLayout *layout = new QHBoxLayout;
unit_profile_table = new QTableWidget(rows, columns);
unit_profile_table->setFixedSize(width, height);
//Tabelle beschriften
QTableWidgetItem *kg = new QTableWidgetItem("KG:");
unit_profile_table->setItem(0, 0, kg);
QTableWidgetItem *bf = new QTableWidgetItem("BF:");
unit_profile_table->setItem(0, 1, bf);
QTableWidgetItem *s = new QTableWidgetItem("S:");
unit_profile_table->setItem(0, 2, s);
QTableWidgetItem *w = new QTableWidgetItem("W:");
unit_profile_table->setItem(0, 3, w);
QTableWidgetItem *lp = new QTableWidgetItem("LP:");
unit_profile_table->setItem(0, 4, lp);
QTableWidgetItem *i = new QTableWidgetItem("I:");
unit_profile_table->setItem(0, 5, i);
QTableWidgetItem *a = new QTableWidgetItem("A:");
unit_profile_table->setItem(0, 6, a);
QTableWidgetItem *mw = new QTableWidgetItem("MW:");
unit_profile_table->setItem(0, 7, mw);
QTableWidgetItem *rw = new QTableWidgetItem("RW:");
unit_profile_table->setItem(0, 8, rw);
for(int i = 0; i < columns; i++)
{
unit_profile_table->resizeColumnToContents(i);
if(unit_profile_table->columnWidth(i) < 36)
unit_profile_table->setColumnWidth(i, 36);
}
QObject::connect(unit_name_combobox, SIGNAL(activated(QString) ), this, SLOT(setUnitProfile(QString) ));
//jetzt versuche ich den eingelesen Profilabschnitt zu zerlegen
layout->addWidget(unit_profile_table);
horizontalGroupBox_profile->setLayout(layout);
}
/*######################################################################################*/
void unit_type_HQ::setProfileTable(QString unit_profile)
{
unit_profile.remove('[');
unit_profile.remove(']');
std::cout<<">> "<<unit_profile.toStdString()<<std::endl;
//Tabelle mit profilwerten füllen
QTableWidgetItem *kg_v = new QTableWidgetItem(unit_profile.section(',',0,0 ) );
unit_profile_table->setItem(1, 0, kg_v);
QTableWidgetItem *bf_v = new QTableWidgetItem(unit_profile.section(',',1,1 ) );
unit_profile_table->setItem(1, 1, bf_v);
QTableWidgetItem *s_v = new QTableWidgetItem(unit_profile.section(',',2,2 ) );
unit_profile_table->setItem(1, 2, s_v);
QTableWidgetItem *w_v = new QTableWidgetItem(unit_profile.section(',',3,3 ) );
unit_profile_table->setItem(1, 3, w_v);
QTableWidgetItem *lp_v = new QTableWidgetItem(unit_profile.section(',',4,4 ) );
unit_profile_table->setItem(1, 4, lp_v);
QTableWidgetItem *i_v = new QTableWidgetItem(unit_profile.section(',',5,5 ) );
unit_profile_table->setItem(1, 5, i_v);
QTableWidgetItem *a_v = new QTableWidgetItem(unit_profile.section(',',6,6 ) );
unit_profile_table->setItem(1, 6, a_v);
QTableWidgetItem *mw_v = new QTableWidgetItem(unit_profile.section(',',7,7 ) );
unit_profile_table->setItem(1, 7, mw_v);
QTableWidgetItem *rw_v = new QTableWidgetItem(unit_profile.section(',',8,8 ) );
unit_profile_table->setItem(1, 8, rw_v);
}
/*######################################################################################*/
void unit_type_HQ::createVerticalGroupBox_equip()
{
verticalGroupBox_equip = new QGroupBox(tr("Ausruestung:") );
QVBoxLayout *layout = new QVBoxLayout;
unit_equipment_list = new QListWidget();
unit_equipment_list->setFixedSize(width, height);
unit_equipment_list->setSelectionMode(QAbstractItemView::MultiSelection);
addUnit_But = new QPushButton(tr("&Hinzufuegen") );
addUnit_But->setFlat(true);
QObject::connect(unit_name_combobox, SIGNAL(activated(QString) ), this, SLOT(setUnitEquipment(QString) ) );
QObject::connect(unit_equipment_list, SIGNAL(itemSelectionChanged() ), this, SLOT(saveSelectedEquipment() ) );
QObject::connect(unit_name_combobox, SIGNAL(activated(QString) ), this, SLOT(setUnit_price(QString) ) );
QObject::connect(addUnit_But, SIGNAL(clicked() ), this, SLOT(start_classfkt() ) );
layout->addWidget(unit_equipment_list);
layout->addWidget(addUnit_But);
verticalGroupBox_equip->setLayout(layout);
}
/*######################################################################################*/
void unit_type_HQ::setEquipList(QStringList list)
{
unit_equipment_list->clear();
unit_equipment_list->addItems(list);
std::cout<<"Equipment gesetzt."<<std::endl;
}
/*######################################################################################*/
/*######################################################################################*/
/*######################################################################################*/
class MyBoardWDG : public QWidget//unit_type_HQ
{
Q_OBJECT
private:
QTableWidgetItem *itm_u;
QTableWidgetItem *itm_e;
int index_hq;
int index_el;
int index_sd;
int index_st;
int index_ap;
QTabWidget *main_tab;
QTableWidget *armee_list;
public:
MyBoardWDG(QWidget *parent = 0);
virtual ~MyBoardWDG()
{
}
QVBoxLayout *armee_list_layout; //layout für tabelle, wird in den konstruktor eingebaut
void create_armee_list_layout();
void addToArmee(QString unit, QString equip, armee_bereich area); //Daten in Tabelle schreiben
void addToArmeeList(QString UName, QStringList equipment) //ruft obere fkt. auf und verarbeitet ein paar daten
{
QString Unit;
QString Equipment;
Unit = UName.section("\t", 0, 0);
for(int i = 0; i < equipment.size(); i++)
{
Equipment += (equipment.at(i) ).section("\t", 0, 0);
if(i < equipment.size() - 1)
Equipment += ", ";
}
addToArmee(Unit, Equipment, Standard);
}
};
/*######################################################################################*/
MyBoardWDG::MyBoardWDG(QWidget *parent) : QWidget(parent)//unit_type_HQ(parent)
{
index_hq = 2;
index_el = 6;
index_sd = 11;
index_st = 19;
index_ap = 23;
QHBoxLayout *mainLayout = new QHBoxLayout(this);
main_tab = new QTabWidget(this);
main_tab->addTab(new unit_type_HQ(0, read_plist("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", hq)), tr("HQ"));
main_tab->addTab(new unit_type_HQ(0, read_plist("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", elite)), tr("Elite"));
main_tab->addTab(new unit_type_HQ(0, read_plist("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", sturm)), tr("Sturm"));
main_tab->addTab(new unit_type_HQ(0, read_plist("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", standard)), tr("Standard"));
main_tab->addTab(new unit_type_HQ(0, read_plist("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", approvement)), tr("Unterstuetzung"));
main_tab->addTab(new unit_type_HQ(0, read_plist("units.src", "/home/dgdaniel/develop/Qt/dgd/src/", transport)), tr("Transport"));
main_tab->setFixedSize(400, 475);
create_armee_list_layout();
mainLayout->addWidget(main_tab);
mainLayout->addLayout(armee_list_layout);
}
/*######################################################################################*/
void MyBoardWDG::create_armee_list_layout()
{
armee_list_layout = new QVBoxLayout();
armee_list = new QTableWidget(27, 4);
armee_list->setColumnWidth(0, 90);
armee_list->setColumnWidth(1, 30);
armee_list->setColumnWidth(2, 440);
armee_list->setColumnWidth(3, 34);
for(int i = 0; i < 27; i++) armee_list->setRowHeight(i, 18);
armee_list->setItem(0, 0, new QTableWidgetItem("Typ:"));
armee_list->setItem(0, 1, new QTableWidgetItem("A:"));
armee_list->setItem(0, 2, new QTableWidgetItem("Ausruestung:"));
armee_list->setItem(0, 3, new QTableWidgetItem("Punkte:"));
armee_list->setItem(1, 0, new QTableWidgetItem("HQ:"));
armee_list->setItem(5, 0, new QTableWidgetItem("Elite:"));
armee_list->setItem(10, 0, new QTableWidgetItem("Standard:"));
armee_list->setItem(18, 0, new QTableWidgetItem("Sturm:"));
armee_list->setItem(23, 0, new QTableWidgetItem("Unterstuetzung:"));
armee_list_layout->addWidget(armee_list);
}
/*######################################################################################*/
void MyBoardWDG::addToArmee(QString unit, QString equip, armee_bereich area)
{
itm_u = new QTableWidgetItem(unit);
itm_e = new QTableWidgetItem(equip);
if(area == HQ && index_hq < 5)
{
armee_list->setItem(index_hq, 0, itm_u);
armee_list->setItem(index_hq, 2, itm_e);
if(index_hq < 5)
index_hq++;
}
if(area == Elite && index_el < 9)
{
armee_list->setItem(index_el, 0, itm_u);
armee_list->setItem(index_el, 2, itm_e);
if(index_el < 10)
index_el++;
}
if(area == Standard && index_sd < 16)
{
armee_list->setItem(index_sd, 0, itm_u);
armee_list->setItem(index_sd, 2, itm_e);
if(index_sd < 18)
index_sd++;
}
if(area == Sturm && index_st < 20)
{
armee_list->setItem(index_st, 0, itm_u);
armee_list->setItem(index_st, 2, itm_e);
if(index_st < 23)
index_st++;
}
if(area == Unterstuetzung && index_ap < 24)
{
armee_list->setItem(index_ap, 0, itm_u);
armee_list->setItem(index_ap, 2, itm_e);
if(index_ap < 28)
index_ap++;
}
}
static const int width = 1065;
static const int height = 475;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyBoardWDG widget;
widget.resize(width, height);
widget.show();
return app.exec();
}
#include "dgd.moc"