[teilw. gelöst]Signal/Slot über mehrere Klassen
Verfasst: 20. November 2009 10:56
Hallo zusammen,
Ich schreibe gerade ein aufwendigeres Programm mit Oberfläche.
Es geht nun darum, dass eine Auswahl aus einer QComboBox gelöscht werden soll. Die entsprechende Funktion dazu soll aufgerufen werden sobald eine Klasse ein bestimmtes Signal sendet.
Zuerst einmal wo das Signal herkommt
Nun die egentliche Funktion mit dem sendes des Signals
Jetzt die Klasse, die auf das Signal reagieren soll
Jetzt Aufruf des connects und die Funktion
Beim Kompilieren erscheint nun folgender Fehler in der newkeydialog.cc beim letzten connect Aufruf der quasi das Signal aus der anderen Klasse mit der Funktion verbinden soll
Verstehe jetzt eben nicht wieso der Fehler hier auftritt.
Bin für jede Hilfe dankbar, falls noch Code oder Erklärungen fehlen einfach meckern
Ich schreibe gerade ein aufwendigeres Programm mit Oberfläche.
Es geht nun darum, dass eine Auswahl aus einer QComboBox gelöscht werden soll. Die entsprechende Funktion dazu soll aufgerufen werden sobald eine Klasse ein bestimmtes Signal sendet.
Zuerst einmal wo das Signal herkommt
Code: Alles auswählen
keycreate.hh
class KeyCreate : public QWidget
{
Q_OBJECT
//nicht relevanter Code
signals:
void maxKeys(const QString &name); //dieses Signal wird naher gesendet
private slots:
void createNewItemKey(const QString& name = "");
//Das Signal kommt von dieser Funktion
Code: Alles auswählen
keycreate.cc
void KeyCreate::createNewItemKey(const QString& name)
{
QString tmpName;
//nicht relevanter Code
if((keyTable->findItems(tmpName, Qt::MatchExactly)).size()!=0 && KeyTable->findItems(tmpName, Qt::MatchExactly).size()!=0)
{
emit maxKeys(tmpName); //hier wird also das Signal gesendet
//mit einer Variablen zusammen
}
Code: Alles auswählen
newkeydialog.hh
#ifndef NEWKEYDIALOG_HH
#define NEWKEYDIALOG_HH
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QComboBox>
class KeyCreate;
class NewKeyDialog : public QDialog
{
Q_OBJECT
//nicht relevanter Code
private slots:
void deleteFromNameList(const QString &name);
//Diese Function soll ausgeführt werden wenn das Signal kommt
private:
KeyCreate *keycreate;
Code: Alles auswählen
newkeydialog.cc
NewKeyDialog::NewKeyDialog(QWidget *parent) : QDialog(parent)
{
qDebug() << "Programmstatus: In NewKeyDialog::NewKeyDialog";
this->setMaximumSize(240, 205);
this->setMinimumSize(240, 205);
this->setWindowTitle(tr("Add Key"));
this->setModal(true);
modes << tr("Pressed")
<< tr("Released");
createNameList();
createLabels();
createButtons();
createComboBoxes();
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(abortButton, SIGNAL(clicked()), this, SLOT(reject()));
connect(keycreate, SIGNAL(maxKeys(QString)), this, SLOT(deleteFromNameList(QString)));
//Dies ist der betreffende connect Aufruf
}
void NewKeyDialog::deleteFromNameList(const QString &name)
{
qDebug() << "Programmstatus: In NewKeyDialog::deleteFromNameList";
for(uint8_t i=0; i<nameList.size(); i++)
{
if(nameList[i]==name) //name found --> delete from list
{
nameList.removeAt(i);
// nameList.sort();
comboName->clear();
comboName->addItems(nameList);
return;
}
}
}
Code: Alles auswählen
no matching function for call to `NewKeyDialog::connect(KeyCreate*&, const char[18], NewKeyDialog* const, const char[29])' newkeydialog.cc /line 23 C/C++ ProblemBin für jede Hilfe dankbar, falls noch Code oder Erklärungen fehlen einfach meckern