[solved]elemente dynamisch erstellen und speichern
[solved]elemente dynamisch erstellen und speichern
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 !
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 !
Zuletzt geändert von Aenni am 21. Januar 2011 15:54, insgesamt 3-mal geändert.
-
dontinelli
- Beiträge: 146
- Registriert: 22. September 2006 20:53
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.
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.
ein nachbau des Designers wollte ich nicht, aber danke fuer deine Hinweise!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...
Jupp es geht ... zB so:
Du schuldest mir 1 Stunde coden (von Projekterstellung bis Posting
aber immerhin hab ich nun 2 mehr QKlassen mal benutzt 
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);
}