Widget in Gridlayout einfügen
Verfasst: 26. März 2010 15:28
Hy.
Ich hab ein kleines Problem und bin noch zugegebenermaßen blutiger Anfänger.
Ich habe eine QWidget Klasse "MCT" als Hauptfenster. In diesem QWidget befindet sich ein GridLayout Design.
In dieses GridLayout will ich während der Laufzeit eine ebenfalls von QWidget abgeleitete Klasse "Test_show" mit Grafik einbinden. Das ganze funktioniert aber leider nicht.
Test_show.h
Test_show.cpp
Test_show soll nun von dieser Klasse MCT aufgerufen werden (Stelle gekennzeichnet, in Funktion void MCT::TestFalsch()):
mct.cpp
Ich hab ein kleines Problem und bin noch zugegebenermaßen blutiger Anfänger.
Ich habe eine QWidget Klasse "MCT" als Hauptfenster. In diesem QWidget befindet sich ein GridLayout Design.
In dieses GridLayout will ich während der Laufzeit eine ebenfalls von QWidget abgeleitete Klasse "Test_show" mit Grafik einbinden. Das ganze funktioniert aber leider nicht.
Test_show.h
Code: Alles auswählen
#ifndef TEST_SHOW_H
#define TEST_SHOW_H
#include <QLayout>
#include "test.h"
// Einbinden eines Tests in grafische Programmoberflaeche
class Test_show: public QWidget
{
//Q_OBJECT
public:
Test_show(Datenbank &db, QString strUserID, QString strTesttyp, QWidget *parent = 0);
~Test_show();
private slots:
private:
void erzeugeTest();
Datenbank *db;
QString strUserID;
QString strTesttyp;
QGridLayout *layoutInhalt;
Test *test;
std::vector<Frage *> Testfragen;
std::vector<Frage *>::iterator it_Testfragen;
std::vector<QLabel *> labFragen;
std::vector<QLabel *>::iterator it_labFragen;
QLabel *testlabel;
};
#endif // TEST_SHOW_H
Code: Alles auswählen
#include "test_show.h"
Test_show::Test_show(Datenbank &db, QString strUserID, QString strTesttyp, QWidget *parent): QWidget(parent)
//Konstruktor
{
qWarning() << "Test_show::Test_show():";
this->db = &db;
this->strUserID = strUserID;
this->strTesttyp = strTesttyp;
testlabel = new QLabel("blubbertest", this);
testlabel->setGeometry(80,20,100,30);
QLabel* qlab = new QLabel(this); // Label
qlab->setText( "first line\nsecond line" );
qlab->setGeometry(20,20,100,30);
QLineEdit* ledit = new QLineEdit(this); // Text-Feld
ledit->setText( "One editable line ..." );
ledit->setGeometry(120,20,200,30);
QPushButton *qpb = new QPushButton("Hello world!",this); // Knopf
qpb->setGeometry(320,20,400,30);
erzeugeTest();
}
Test_show::~Test_show()
// Destruktor
{
qWarning() << "Test_show::~Test_show():";
//delete labUeberschrift;
}
void Test_show::erzeugeTest()
{
qWarning() << "Test_show::erzeugeTest():";
}
Test_show soll nun von dieser Klasse MCT aufgerufen werden (Stelle gekennzeichnet, in Funktion void MCT::TestFalsch()):
mct.cpp
Code: Alles auswählen
#include "mct.h"
MCT::MCT(int UserID, Datenbank &db, QWidget *parent): QWidget(parent)
//Konstruktor
{
this->db = &db;
// UserID in QString
strUserID.setNum(UserID);
// Fenstertitel und Fenstergroesse
setWindowTitle(PROGRAMMNAME);
setMinimumSize(800, 600);
showMaximized();
initZeiger();
erzeugeInhalt();
verbindeAktionen();
}
MCT::~MCT()
// Destruktor
{
delete test_show;
delete labUeberschrift;
delete labVersion;
delete labInformationen;
delete labInhaltTitel;
delete buttonTestNeu;
delete buttonTestZufall;
delete buttonTestFalsch;
delete buttonHistorie;
delete buttonEinstellungen;
delete buttonAdministration;
delete layoutMenue;
delete layoutInhalt;
delete layoutFenster;
}
void MCT::initZeiger()
// initialisiere temporaere Zeiger mit NULL
{
test_show = NULL;
buttonAdministration = NULL;
}
void MCT::erzeugeInhalt()
// erzeugt alle Buttons, Labels und Eingabefelder
{
// --- Labels
QString qstrProgrammname = "<b><font size=12>";
qstrProgrammname += PROGRAMMNAME;
qstrProgrammname += "</font></b>";
labUeberschrift = new QLabel(qstrProgrammname, this);
QString qstrVersion = "v";
qstrVersion += VERSION;
labVersion = new QLabel(qstrVersion, this);
// hole Benutzername und Benutzertyp aus Datenbank
QSqlQueryModel Query;
QString sql_befehl = "select * from mct_users where id_user = ";
sql_befehl += strUserID;
if (!(db->sende(Query, sql_befehl)))
{
// keine Datenbankverbindung
exit(1);
}
// gebe Benutzer gegebenfalls Administratorrechte
if (Query.record(0).value("usertype").toString() == "admin")
Admin = true;
else
Admin = false;
QString qstrInformationen = "Angemeldet als ";
qstrInformationen += Query.record(0).value("username").toString();
qstrInformationen += "\nUserID: ";
qstrInformationen += strUserID;
if (Admin)
qstrInformationen += "\nAdministrator";
if (!(db->sende(Query, "SELECT _value FROM mct_settings WHERE _key = 'scheme'")))
{
// keine Datenbankverbindung
exit(2);
}
qstrInformationen += "\n";
qstrInformationen += Query.record(0).value("_value").toString();
labInformationen = new QLabel(qstrInformationen, this);
labInhaltTitel = new QLabel("<font size=5><b>Willkommen!</b></font>", this);
// --- Labels Ende
// --- Buttons
buttonTestNeu = new QPushButton("Test mit neuen Fragen", this);
buttonTestZufall = new QPushButton("Test mit zufaelligen Fragen", this);
buttonTestFalsch = new QPushButton("Test mit falsch beantworteten Fragen", this);
buttonHistorie = new QPushButton("Historie", this);
buttonEinstellungen = new QPushButton("Einstellungen", this);
if (Admin)
buttonAdministration = new QPushButton("Administration", this);
// --- Buttons Ende
// --- Layout
layoutFenster = new QGridLayout;
layoutMenue = new QHBoxLayout;
layoutInhalt = new QGridLayout;
// Titelleiste
layoutFenster->addWidget(labInformationen, 0, 0, Qt::AlignTop);
layoutFenster->addWidget(labUeberschrift, 0, 1, Qt::AlignTop | Qt::AlignHCenter);
layoutFenster->addWidget(labVersion, 0, 2, Qt::AlignTop | Qt::AlignRight);
// Menue
layoutMenue->addWidget(buttonTestNeu);
layoutMenue->addWidget(buttonTestZufall);
layoutMenue->addWidget(buttonTestFalsch);
layoutMenue->addWidget(buttonHistorie);
layoutMenue->addWidget(buttonEinstellungen);
if (Admin)
layoutMenue->addWidget(buttonAdministration);
layoutFenster->addLayout(layoutMenue, 1, 0, 1, -1, Qt::AlignTop | Qt::AlignHCenter);
// Inhalt
layoutInhalt->addWidget(labInhaltTitel, 0, 0, 1, -1, Qt::AlignTop | Qt::AlignHCenter);
layoutFenster->addLayout(layoutInhalt, 2, 0, 10, -1, Qt::AlignTop | Qt::AlignHCenter);
setLayout(layoutFenster);
// --- Layout Ende
}
void MCT::verbindeAktionen()
// Aktionen via Signals&Slots verknuepfen
{
connect(buttonTestNeu, SIGNAL(clicked()), this, SLOT(TestNeu()));
connect(buttonTestZufall, SIGNAL(clicked()), this, SLOT(TestZufall()));
connect(buttonTestFalsch, SIGNAL(clicked()), this, SLOT(TestFalsch()));
connect(buttonHistorie, SIGNAL(clicked()), this, SLOT(Historie()));
connect(buttonEinstellungen, SIGNAL(clicked()), this, SLOT(Einstellungen()));
if (Admin)
connect(buttonAdministration, SIGNAL(clicked()), this, SLOT(Administration()));
}
void MCT::TestFalsch()
{
labInhaltTitel->setText("<font size=5><b>Test mit falsch beantworteten Fragen</b></font>");
// HIIIIIIIIIIIIIIIIIIIIIER: fuinktioniert aber nicht!
test_show = new Test_show(*db, strUserID, "new");
layoutInhalt->addWidget(test_show, 1, 0, 1, -1, Qt::AlignTop);
}