Seite 1 von 1
[solved]elemente dynamisch erstellen und speichern
Verfasst: 18. Januar 2011 10:09
von Aenni
Hallo liebe Qt-Experten,
ich habe ein kleines Problem und suche somit euren Rat.
Ich möchte dynamisch Elemente erstellen und diese dann Speichern.
Das heisst: Das Ertsellen der Elemente (Buttons and so on...) ist kein Thema. Nur sind diese natürlich nach einem Programm beenden und neustarten wieder weg - sofern ich diese nicht in irgendeiner Form speichere.
Meine Frage wäre jetzt, was wäre ein geschickter Weg diese Elemente zu speichern-und diese somit beim Neustarten des Programmes wieder verfuegbar sind.
Eine Ini Datei erzeugen, und diese beim Start Laden ? Leider bin ich diesbezüglich etwas Ratlos. Würde mich über Tipps freuen.
Danke
Gruss !
Verfasst: 18. Januar 2011 11:10
von dontinelli
Was für Elemente möchtest du speichern?
I.d.R. führt nichts daran vorbei, beim Beenden des Programms die Konfiguration der Elemente zu speichern und sie beim Neustart neu zu erstellen und sie mit den gespeicherten Einstellungen zu konfigurieren.
Wie du die Einstellungen speicherst (ini/xml/sql/eigenes dateiformat) kommt darauf an, welche funktionalität du benötigst.
Verfasst: 18. Januar 2011 11:11
von padreigh
Du könntest QSettings dafür nehmen - nur weiss ich nicht in wie weit das Sinn macht - du müsstest ja neben den Knöpfen auch die Connections usw. speichern - klingt irgendwie nach komischem Design (für mich).
Verfasst: 18. Januar 2011 11:19
von Aenni
derzeit brauche ich eig. nur dynamische RadioButtons.
Ich wollte dass der user eine möglichkeit hat, radio buttons nach eigenem ermeßen zu erstellen.
Aber es gibt bestimmt dafuer design technisch einen eleganteren Weg.(wie so oft;) Nur komme ich derzeit nicht drauf.
Verfasst: 18. Januar 2011 12:24
von upsala
Du solltest dir mal überlegen was du überhautpt willst, momentan hört sich das mehr nach einem Nachbau vom Designer an.
Ansonsten gibt es für deine Rechtschreibung bestimmt einen design technisch eleganteren Weg...
Verfasst: 18. Januar 2011 12:57
von Aenni
upsala hat geschrieben:Du solltest dir mal überlegen was du überhautpt willst, momentan hört sich das mehr nach einem Nachbau vom Designer an.
Ansonsten gibt es für deine Rechtschreibung bestimmt einen design technisch eleganteren Weg...
ein nachbau des Designers wollte ich nicht, aber danke fuer deine Hinweise!
Verfasst: 18. Januar 2011 13:38
von padreigh
Sag doch mal was der User da machen will ... vielleicht kann dir dann jemand helfen - sozusagen das ZIEL, nicht was du dir vorstellst wies gehen könnte ...
Verfasst: 18. Januar 2011 14:08
von Aenni
ich habe derzeit 5 radio buttons die eine Art Rubrik darstellen. Jetzt gibt es zu jeder Rubrik Infos, die der user ändern kann. Was er aber nicht kann, ist eine neue Rubrik hinzufuegen.
Jetzt waere es schick, wenn der User neue Rubriken hinzufuegen kann.
so far ty.
Verfasst: 18. Januar 2011 16:29
von padreigh
Jupp es geht ... zB so:
Code: Alles auswählen
#include <QtGui>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Code: Alles auswählen
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QSettings>
class QSettings;
class QButtonGroup;
class QVBoxLayout;
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private slots:
void addOwnRadio();
void removeOwnRadio();
private:
void addOwn(const QString & text);
private:
QSettings * m_settings;
QButtonGroup * m_bg;
QVBoxLayout * m_vlayOWN;
};
#endif // WIDGET_H
Code: Alles auswählen
#include "widget.h"
#include <QApplication>
#include <QtGui>
Widget::Widget(QWidget *parent) :
QWidget(parent),
m_settings(new QSettings(QSettings::IniFormat,
QSettings::UserScope,
"QSettingsTest",
"qSettingsTestApp")),
m_bg(0),
m_vlayOWN(0)
{
QVBoxLayout * vlay = new QVBoxLayout(this);
QVBoxLayout * vlayFIX = new QVBoxLayout;
m_bg = new QButtonGroup(this);
for(int i=0; i<5; ++i)
{
QRadioButton * but = new QRadioButton("fixRB "+QString::number(i),this);
vlayFIX->addWidget(but);
m_bg->addButton(but);
}
m_bg->setExclusive(true);
m_bg->buttons().first()->setChecked(true);
QToolButton * tbAdd = new QToolButton(this);
tbAdd->setText("add RadioButton");
tbAdd->setObjectName("addRadioButton");
connect(tbAdd,SIGNAL(clicked()),this,SLOT(addOwnRadio()));
QToolButton * tbRemove = new QToolButton(this);
tbRemove->setText("remove RadioButton");
tbRemove->setObjectName("remRadioButton");
connect(tbRemove,SIGNAL(clicked()),this,SLOT(removeOwnRadio()));
m_vlayOWN= new QVBoxLayout;
while(! m_settings->group().isEmpty()) m_settings->endGroup();
m_settings->beginGroup("ownRadioButtonNames");
foreach( QString s, m_settings->allKeys())
{
addOwn(s);
}
m_settings->endGroup();
vlayFIX->addLayout(m_vlayOWN);
vlay->addLayout(vlayFIX);
vlay->addStretch(1);
vlay->addWidget(tbAdd);
vlay->addWidget(tbRemove);
}
Widget::~Widget()
{
}
void Widget::addOwn(const QString & text)
{
QRadioButton * cb = new QRadioButton(text,this);
cb->setObjectName("OWN");
m_vlayOWN->addWidget(cb);
m_bg->addButton(cb);
}
void Widget::addOwnRadio()
{
QString title = QInputDialog::getText(this, tr("Input title"),tr("Whats the new options name?"));
if (title.isNull()) return;
// disallow double entries
foreach (QRadioButton * but, findChildren<QRadioButton*>("OWN"))
{
if (but->text() == title)
{
QMessageBox::information(this,tr("Info"),tr("Already there."));
return;
}
}
addOwn(title);
while(! m_settings->group().isEmpty()) m_settings->endGroup();
m_settings->beginGroup("ownRadioButtonNames");
m_settings->setValue(title,QVariant());
}
void Widget::removeOwnRadio()
{
QList<QRadioButton*> owns = findChildren<QRadioButton*>("OWN");
if (owns.isEmpty())
{
QMessageBox::information(this,tr("Info"),tr("Nothing to remove."));
return;
}
QStringList rbListNames;
rbListNames << "";
foreach (QRadioButton *rb, owns) rbListNames << rb->text();
QString title = QInputDialog::getItem(this,tr("Choose title"),tr("Remove which one?"),rbListNames,0,false);
foreach (QRadioButton *rb, owns)
{
if (rb->text() == title)
{
rb->close();
rb->deleteLater();
break;
}
}
while(! m_settings->group().isEmpty()) m_settings->endGroup();
m_settings->beginGroup("ownRadioButtonNames");
m_settings->remove(title);
}
Du schuldest mir 1 Stunde coden (von Projekterstellung bis Posting

aber immerhin hab ich nun 2 mehr QKlassen mal benutzt

Verfasst: 19. Januar 2011 10:34
von Aenni
wow ein großes dankeschoen an dich padreigh!!!