ich hatte ich hier letztens mit eurer Hilfe QComboBoxen mit Qlist dynamisch erzeugt (siehe auch http://qtforum.de/forum/viewtopic.php?t=3489!
Nun fehlt mir nur noch das i-Tüpfelchen, wobei ich mir nicht sicher bin, ob das überhaupt geht: Ich möchte, dass, wenn in einer der dynamisch erzeugten QComboboxen eine neue Auswahl getroffen wird, eine entsprechende Procedure (hier "clickcombobox") gestartet wird. Dies geschieht üblicherweise mit connect (Signal-Slot)!
Den Slot zu schreiben ist kein Problem, aber wie sieht die connect-Anweisung aus? Wenn ich auf den Pushbutton "einfuegen" drücke, wird der Text geschrieben!! Wenn ich in der ersten Combobox was neues auswähle nicht?
Ich habe auch zwei Varianten: Die 1. wird kompiliert, funktioniert aber nicht, d.h. es wird kein Text in Line2 geschrieben. Die 2. wird gar nicht erst kompiliert -> Fehlermeldung.
Variante 1:
Headerdatei:
Code: Alles auswählen
#ifndef TABLEEDITOR_H
#define TABLEEDITOR_H
#include <QDialog>
#include <QtCore>
class QSqlTableModel;
class QSqlQueryModel;
class QLineEdit;
class QComboBox;
class QList<QComboBox>;
class TableEditor : public QDialog
{
Q_OBJECT
public:
TableEditor(const QString &tableName, QWidget *parent = 0);
private slots:
void clickcombobox();
private:
QPushButton *pbeinfuegen;
QSqlTableModel *tablemodel;
QSqlQueryModel *querymodel;
QLineEdit *line2;
QComboBox *tmpp;
};
#endifCode: Alles auswählen
#include <QtGui>
#include <QtSql>
#include <QTabWidget>
#include <QString>
#include "tableeditor.h"
TableEditor::TableEditor(const QString &tableName, QWidget *parent)
: QDialog(parent)
{
line2 = new QLineEdit;
pbeinfuegen = new QPushButton(tr("Einfuegen"));
QSqlQuery query; //Objekt Datenbankabfrage
query.exec("select zobergruppe, zuntergruppe FROM zweck ORDER BY zobergruppe ASC "); //ca. 12 Datensätze selektieren
QString h1 = "xyz";
int i=0; int zeile=0; //Laufvariablen
QList<QComboBox*> listcbzweck; //QList mit Comboboxen erzeugen
while (query.next()) { //12 Datensätze aus Datenbankabfrage durchlaufen
if (h1 != query.value(0).toString()){
h1 = query.value(0).toString();
QComboBox *tmpp = new QComboBox(); //neue Combobox erzeugen
listcbzweck.append(tmpp); //Combobox zur Liste hinzufügen
vblgroupbox1->addWidget(listcbzweck.at(i),zeile+1,i-zeile*3); //Combobox zum Layout
listcbzweck.at(i)->addItem(query.value(1).toString()); //Combobox füllen
++i;
if (i==6){zeile=zeile+2;}
} else {
listcbzweck.at(i-1)->addItem(query.value(1).toString()); //Comboboxen füllen
}
}
connect(pbeinfuegen, SIGNAL(clicked()), this, SLOT(clickcombobox()));
connect(listcbzweck.at(0), SIGNAL(currentIndexChanged()), this, SLOT(clickcombobox()));
}
void TableEditor::clickcombobox()
{
line2->setText(tr("test"));
}
Headerdatei:
Code: Alles auswählen
#ifndef TABLEEDITOR_H
#define TABLEEDITOR_H
#include <QDialog>
#include <QtCore>
class QSqlTableModel;
class QSqlQueryModel;
class QLineEdit;
class QComboBox;
class QList<QComboBox>;
class TableEditor : public QDialog
{
Q_OBJECT
public:
TableEditor(const QString &tableName, QWidget *parent = 0);
private slots:
void clickcombobox();
private:
QPushButton *pbeinfuegen;
QSqlTableModel *tablemodel;
QSqlQueryModel *querymodel;
QLineEdit *line2;
QComboBox *tmpp;
};
#endifCode: Alles auswählen
#include <QtGui>
#include <QtSql>
#include <QTabWidget>
#include <QString>
#include "tableeditor.h"
TableEditor::TableEditor(const QString &tableName, QWidget *parent)
: QDialog(parent)
{
line2 = new QLineEdit;
pbeinfuegen = new QPushButton(tr("Einfuegen"));
QSqlQuery query; //Objekt Datenbankabfrage
query.exec("select zobergruppe, zuntergruppe FROM zweck ORDER BY zobergruppe ASC "); //ca. 12 Datensätze selektieren
QString h1 = "xyz";
int i=0; int zeile=0; //Laufvariablen
QList<QComboBox*> listcbzweck; //QList mit Comboboxen erzeugen
while (query.next()) { //12 Datensätze aus Datenbankabfrage durchlaufen
if (h1 != query.value(0).toString()){
h1 = query.value(0).toString();
QComboBox *tmpp = new QComboBox(); //neue Combobox erzeugen
listcbzweck.append(tmpp); //Combobox zur Liste hinzufügen
vblgroupbox1->addWidget(listcbzweck.at(i),zeile+1,i-zeile*3); //Combobox zum Layout
listcbzweck.at(i)->addItem(query.value(1).toString()); //Combobox füllen
++i;
if (i==6){zeile=zeile+2;}
} else {
listcbzweck.at(i-1)->addItem(query.value(1).toString()); //Comboboxen füllen
}
}
connect(pbeinfuegen, SIGNAL(clicked()), this, SLOT(clickcombobox()));
connect(listcbzweck, SIGNAL(currentIndexChanged()), this, SLOT(clickcombobox())); //--> was ist hier falsch??
}
void TableEditor::clickcombobox()
{
line2->setText(tr("test"));
}
Code: Alles auswählen
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.2.0/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include/QtSql -I/usr/local/Trolltech/Qt-4.2.0/include/QtSql -I/usr/local/Trolltech/Qt-4.2.0/include -I. -I. -I. -o tableeditor.o tableeditor.cpp
tableeditor.cpp: In constructor ‘TableEditor::TableEditor(const QString&, QWidget*)’:
tableeditor.cpp:178: error: no matching function for call to ‘TableEditor::connect(QList<QComboBox*>&, const char [23], TableEditor* const, const char [17])’
/usr/local/Trolltech/Qt-4.2.0/include/QtCore/qobject.h:181: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/usr/local/Trolltech/Qt-4.2.0/include/QtCore/qobject.h:282: note: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
make: *** [tableeditor.o] Fehler 1