[gelöst] QRadioButton und Einbindung in interner Struktur
Verfasst: 24. Juli 2008 23:45
Hallo,
ich will kurz ausholen um zu erklären, was ich hier vorhabe. Die Klasse Teil einer Kontroloberfläche werden, mit best. techn. Geräte überwacht werden können. Diese Geräte geben von Zeit zu Zeit über XML-Handlungsalternativen, die man wählen kann oder nicht, das heisst, ich möchte eine RadioButtonListe mit den Alternativen und immer, wenn es eine neue Auswahl gibt, möchte ich diese neu aufbauen. Die RadioButtons an sich will ich in einen internen Container packen, da ich bei einem Klick ja wissen will, worauf geklickt wurde und von dem geklickten RadioButton den Text brauche.
Mein Headerfile:
Die Klasse an sich:
Die Anforderungen an die Klasse:
- das RadioButton-Objekt soll nur einmal vorhanden sein, also eigentlich per Pointer, das hat aber nicht zum gewünschten Ergebnis geführt
Es knallt bei mir immer bei der Hinzufüge-Klasse, egal ob ich von QRadioButton-Pointern ausgehe (QradioButton *radio = new QradioButton(alternatives.value(i));), oder aber von einem QRadioButton-Objekt.
Der Compiler steigt immer bei MS VS2008 bei dem append aus, wobei ich mit dem append auch nicht wirklich glücklich bin, da das Objekt kopiert wird. Die QList kopiert aber auch als Container.
Meine Fragen:
- Habe ich einen falschen Denkansatz?
- Welchen Container kann ich verwenden, so dass ich nur ein Objekt in meinem internen Container und in dem Layout habe
- wie bekomme ich den Compiler beim aktuellen Ansatz dazu, dass er durchkompiliert?
Aller, aller besten Dank an alle
Alexander
ich will kurz ausholen um zu erklären, was ich hier vorhabe. Die Klasse Teil einer Kontroloberfläche werden, mit best. techn. Geräte überwacht werden können. Diese Geräte geben von Zeit zu Zeit über XML-Handlungsalternativen, die man wählen kann oder nicht, das heisst, ich möchte eine RadioButtonListe mit den Alternativen und immer, wenn es eine neue Auswahl gibt, möchte ich diese neu aufbauen. Die RadioButtons an sich will ich in einen internen Container packen, da ich bei einem Klick ja wissen will, worauf geklickt wurde und von dem geklickten RadioButton den Text brauche.
Mein Headerfile:
Code: Alles auswählen
#include <QtGui>
class ReMoCoAlternatives : public QGroupBox
{
Q_OBJECT
public:
ReMoCoAlternatives(QWidget *parent = 0);
void newAlternatives(QVector<QString> alternatives);
signals:
void loadAlternative(const QString &);
public slots:
void alternativeSelected();
private:
QVector<QRadioButton> *_itemsAM;
QVBoxLayout *vBox;
};Code: Alles auswählen
#include "ReMoCoAlternatives.h"
ReMoCoAlternatives::ReMoCoAlternatives(QWidget *parent)
: QGroupBox(parent)
{
setTitle(tr("Alternatives"));
}
void ReMoCoAlternatives::newAlternatives(QVector<QString> alternatives)
{
vBox = new QVBoxLayout;
for (int i = 0; i < _itemsAM->size(); i++) {
disconnect(_itemsAM->value(i), SIGNAL(clicked()),
this, SLOT(alternativeSelected()));
}
_itemsAM->clear();
for (int i = 0; i < alternatives.size();i++) {
QRadioButton radio(alternatives.value(i));
_itemsAM << radio;
vBox->addWidget(&radio);
connect(&radio, SIGNAL(clicked()),
this, SLOT(alternativeSelected()));
}
vBox->addStretch(1);
setLayout(vBox);
show();
}
void ReMoCoAlternatives::alternativeSelected()
{
QString commandAlternative;
for (int i = 0; i < _itemsAM->size(); i++) {
if (_itemsAM->value(i).isChecked()) {
commandAlternative = _itemsAM->value(i).text();
}
_itemsAM->value(i).setEnabled(false);
}
emit loadAlternative(commandAlternative);
}
- das RadioButton-Objekt soll nur einmal vorhanden sein, also eigentlich per Pointer, das hat aber nicht zum gewünschten Ergebnis geführt
Es knallt bei mir immer bei der Hinzufüge-Klasse, egal ob ich von QRadioButton-Pointern ausgehe (QradioButton *radio = new QradioButton(alternatives.value(i));), oder aber von einem QRadioButton-Objekt.
Der Compiler steigt immer bei MS VS2008 bei dem append aus, wobei ich mit dem append auch nicht wirklich glücklich bin, da das Objekt kopiert wird. Die QList kopiert aber auch als Container.
Meine Fragen:
- Habe ich einen falschen Denkansatz?
- Welchen Container kann ich verwenden, so dass ich nur ein Objekt in meinem internen Container und in dem Layout habe
- wie bekomme ich den Compiler beim aktuellen Ansatz dazu, dass er durchkompiliert?
Aller, aller besten Dank an alle
Alexander