[gelöst:] Signal funktioniert nicht
[gelöst:] Signal funktioniert nicht
Ich habe mit dem Designer eine Oberfläche (MainWindow1)zusammen geklickt.
Dann habe ich eine neue Klasse (MainWindow1) erstellt die von (Ui::MainWindow1) erbt.
Der Menüeintrag actionQt und der Pushbutton newButton sind Elemente von Ui_MainWindow1.
Somit sind diese auch Elemente von MainWindow1.
Diese Elemente sind nun connected: (im Konstruktor von MainWindow1)
connect(actionQT, SIGNAL(triggered()), this, SLOT(funktion1()) );
sowie
connect(newButton, SIGNAL(clicked()), this, SLOT(funktion2()) );
Die Funktionen sind Definiert in der Klasse MainWindow1.
Wenn ich das Programm kompiliere reagiert nichts auf ein Klick.
Eine Messagebox die im Konstruktor geladen wird poppt auf.
Wenn ich nach den connecten folgenden Befehle ausführe werden funktion1() und funktion2() gestartet.
actionQt -> trigger();
newButton -> click();
Woran liegt es, dass die Oberfläche nicht auf die Klicks reagieren?
Dann habe ich eine neue Klasse (MainWindow1) erstellt die von (Ui::MainWindow1) erbt.
Der Menüeintrag actionQt und der Pushbutton newButton sind Elemente von Ui_MainWindow1.
Somit sind diese auch Elemente von MainWindow1.
Diese Elemente sind nun connected: (im Konstruktor von MainWindow1)
connect(actionQT, SIGNAL(triggered()), this, SLOT(funktion1()) );
sowie
connect(newButton, SIGNAL(clicked()), this, SLOT(funktion2()) );
Die Funktionen sind Definiert in der Klasse MainWindow1.
Wenn ich das Programm kompiliere reagiert nichts auf ein Klick.
Eine Messagebox die im Konstruktor geladen wird poppt auf.
Wenn ich nach den connecten folgenden Befehle ausführe werden funktion1() und funktion2() gestartet.
actionQt -> trigger();
newButton -> click();
Woran liegt es, dass die Oberfläche nicht auf die Klicks reagieren?
Zuletzt geändert von The_Akki am 30. Januar 2008 09:11, insgesamt 1-mal geändert.
Ich habe ein ähnliches Problem. Die Funktionen star()t und image_info() kann ich per PsuhButton aufrufen. Nur init() nicht, weil es aus einer anderen Klasse/Datei stammt.upsala hat geschrieben:Wenn die Signal-Slot-Verbindung nicht hergestellt werden kann, dann gibt es eine Fehlermeldung auf der Konsole.
Code: Alles auswählen
bgroup = new QGroupBox(this);
start = new QPushButton("&Start", bgroup);
start->setGeometry(100, 10, 10, 10);
connect(start, SIGNAL(clicked()), this, SLOT(start_clicked()));
info = new QPushButton("Video &Info", bgroup);
info->setGeometry(100, 10, 10, 10);
connect(info, SIGNAL(clicked()), this, SLOT(image_info()));
stop = new QPushButton("Stop", bgroup);
stop->setGeometry(100, 10, 10, 10);
GLScene::connect(stop, SIGNAL(clicked()), this, SLOT(init()));
Code: Alles auswählen
Object::connect: No such slot MainWindow::init()
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
mhm... tippfehler. jetzt funzt es !AndiLatte hat geschrieben:das ist mir auch grad aufgefallen. habe es geändert - funktioniert aber noch nicht !Christian81 hat geschrieben:Wenn init nicht in MainWindow definiert ist, warum schreibst du dann 'this' beim connect hin?
Code: Alles auswählen
GLScene *glScene = new GLScene;
bgroup = new QGroupBox(this);
start = new QPushButton("&Start", bgroup);
start->setGeometry(100, 10, 10, 10);
connect(start, SIGNAL(clicked()), this, SLOT(start_clicked()));
stop = new QPushButton("Stop", bgroup);
stop->setGeometry(100, 10, 10, 10);
GLScene::connect(stop, SIGNAL(clicked()), glScene, SLOT(init()));
info = new QPushButton("Video &Info", bgroup);
info->setGeometry(100, 10, 10, 10);
connect(info, SIGNAL(clicked()), this, SLOT(image_info()));
da kann ich mich meinen vorschreibern nur anschließen. Was spuckt deine Konsole aus, wenn du den Button klickst? Mir hat die Fehlerausgabe der Konsole bei meinem Problem sehr geholfen...The_Akki hat geschrieben:Leider ist damit mein Fehler noch nicht aus der Welt.
Wie erläutert funktioniert die Verbindung wenn ich die Methode click() der Instanz des Buttons aufrufe. Doch in der Oberfläche funktioniert es nicht.
Vielleicht kam es nicht so rüber wie ich wollte.
Die Konsole gibt nichts aus, die connect-Funktion gibt true zurück.
Soweit funktionieren die Verbindungen ja, wenn ich die Methode der auslösenden Objekte click() bzw. trigger() ausführe. Dies funktioniert nicht mehr, wenn ich die Verbindungen auskommentiere. Also vermute ich, dass es irgendwie an den Signalen bzw. an den auslösenden Objekten Button oder Action liegen muss.
Die Konsole gibt nichts aus, die connect-Funktion gibt true zurück.
Soweit funktionieren die Verbindungen ja, wenn ich die Methode der auslösenden Objekte click() bzw. trigger() ausführe. Dies funktioniert nicht mehr, wenn ich die Verbindungen auskommentiere. Also vermute ich, dass es irgendwie an den Signalen bzw. an den auslösenden Objekten Button oder Action liegen muss.
Anbei das Minimalbeispiel. Es lässt sich bei mir kompilieren.
Der Menüeintrag "Qt" und der "Neues"-Button funktioniert nicht.
Wenn ich die Zeilen "Signal auslösen" einkommentiere werden die gewünschten Methoden aufgerufen. Beim Anklicken in der Oberfläche jedoch nicht.
Wie bereits erwähnt gibt es keine Ausgabe auf der Konsole. Die connect-Methode geben auch true zurück.
Nun weiß ich nicht wo mein Fehler liegt.
Der Menüeintrag "Qt" und der "Neues"-Button funktioniert nicht.
Wenn ich die Zeilen "Signal auslösen" einkommentiere werden die gewünschten Methoden aufgerufen. Beim Anklicken in der Oberfläche jedoch nicht.
Wie bereits erwähnt gibt es keine Ausgabe auf der Konsole. Die connect-Methode geben auch true zurück.
Nun weiß ich nicht wo mein Fehler liegt.
Code: Alles auswählen
//main.cpp
#include <QApplication>
#include <QTranslator>
#include <QLocale>
#include <QDialog>
#include <QMessageBox>
#include "mainwindow1.h"
int main(int argc, char *argv[]){
QApplication app(argc,argv);
QTranslator appTranslator;
appTranslator.load((QString)argv[0] + "_" + QLocale::system().name(), qApp->applicationDirPath());
app.installTranslator(&appTranslator);
MainWindow1 ui;
QMainWindow *window = new QMainWindow();
ui.setupUi(window);
window -> show();
return app.exec();
}
Code: Alles auswählen
#ifndef MAINWINDOW1_H
#define MAINWINDOW1_H
#include <QDialog>
#include "ui_mainwindow1.h"
class MainWindow1 : public QMainWindow, public Ui::MainWindow1{
Q_OBJECT
public:
MainWindow1(QWidget *parent = 0);
public slots:
void showNeuesDialog();
};
#endif
Code: Alles auswählen
//mainwindow1.cpp
#include <QtGui>
#include <QMessageBox>
#include "mainwindow1.h"
MainWindow1::MainWindow1(QWidget *parent) : QMainWindow(parent)/*, QObject(parent)*/{
setupUi(this);
connect(actionQt,SIGNAL( triggered() ), qApp, SLOT( aboutQt() ));
connect(buttonNeu, SIGNAL( clicked() ), this, SLOT( showNeuesDialog() ));
//buttonNeu -> click(); /* Signal ausloesen */
//actionQt -> trigger(); /* Signal ausloesen */
QMessageBox::warning(this,"MainWindow1()",qApp -> applicationDirPath() + "\n" + "connected", QMessageBox::Ok);
}
void MainWindow1::showNeuesDialog(){
QMessageBox::warning(this,"Neu","Dieser Dialog erscheint, da sie was neues erstellen moechten.", QMessageBox::Ok);
}
Code: Alles auswählen
#ifndef UI_MAINWINDOW1_H
#define UI_MAINWINDOW1_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QTabWidget>
#include <QtGui/QWidget>
class Ui_MainWindow1
{
public:
QAction *actionNeu;
QAction *actionBeenden;
QAction *actionQt;
QTabWidget *tabWidgetMain;
QWidget *tabMain;
QPushButton *buttonNeu;
QMenuBar *menubar;
QMenu *menuProgramm;
QMenu *menuHilfe;
QMenu *menu_ber;
QStatusBar *statusbar;
void setupUi(QMainWindow *MainWindow1)
{
if (MainWindow1->objectName().isEmpty())
MainWindow1->setObjectName(QString::fromUtf8("MainWindow1"));
MainWindow1->resize(1280, 730);
actionNeu = new QAction(MainWindow1);
actionNeu->setObjectName(QString::fromUtf8("actionNeu"));
actionBeenden = new QAction(MainWindow1);
actionBeenden->setObjectName(QString::fromUtf8("actionBeenden"));
actionQt = new QAction(MainWindow1);
actionQt->setObjectName(QString::fromUtf8("actionQt"));
tabWidgetMain = new QTabWidget(MainWindow1);
tabWidgetMain->setObjectName(QString::fromUtf8("tabWidgetMain"));
tabWidgetMain->setEnabled(true);
tabWidgetMain->setGeometry(QRect(10, 30, 1261, 681));
tabMain = new QWidget();
tabMain->setObjectName(QString::fromUtf8("tabMain"));
buttonNeu = new QPushButton(tabMain);
buttonNeu->setObjectName(QString::fromUtf8("buttonNeu"));
buttonNeu->setGeometry(QRect(80, 40, 311, 161));
tabWidgetMain->addTab(tabMain, QString());
menubar = new QMenuBar(MainWindow1);
menubar->setObjectName(QString::fromUtf8("menubar"));
menubar->setGeometry(QRect(0, 0, 381, 31));
menuProgramm = new QMenu(menubar);
menuProgramm->setObjectName(QString::fromUtf8("menuProgramm"));
menuHilfe = new QMenu(menubar);
menuHilfe->setObjectName(QString::fromUtf8("menuHilfe"));
menu_ber = new QMenu(menubar);
menu_ber->setObjectName(QString::fromUtf8("menu_ber"));
MainWindow1->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow1);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
statusbar->setGeometry(QRect(0, 0, 16, 22));
MainWindow1->setStatusBar(statusbar);
menubar->addAction(menuProgramm->menuAction());
menubar->addAction(menuHilfe->menuAction());
menubar->addAction(menu_ber->menuAction());
menuProgramm->addAction(actionNeu);
menuProgramm->addAction(actionBeenden);
menu_ber->addAction(actionQt);
retranslateUi(MainWindow1);
QObject::connect(actionBeenden, SIGNAL(triggered()), MainWindow1, SLOT(close()));
tabWidgetMain->setCurrentIndex(0);
QMetaObject::connectSlotsByName(MainWindow1);
} // setupUi
void retranslateUi(QMainWindow *MainWindow1)
{
MainWindow1->setWindowTitle(QApplication::translate("MainWindow1", "Hauptprogramm", 0, QApplication::UnicodeUTF8));
actionNeu->setText(QApplication::translate("MainWindow1", "Neu", 0, QApplication::UnicodeUTF8));
actionBeenden->setText(QApplication::translate("MainWindow1", "Beenden", 0, QApplication::UnicodeUTF8));
actionBeenden->setShortcut(QApplication::translate("MainWindow1", "Ctrl+S", 0, QApplication::UnicodeUTF8));
actionQt->setText(QApplication::translate("MainWindow1", "Qt", 0, QApplication::UnicodeUTF8));
buttonNeu->setText(QApplication::translate("MainWindow1", "Neu", 0, QApplication::UnicodeUTF8));
tabWidgetMain->setTabText(tabWidgetMain->indexOf(tabMain), QApplication::translate("MainWindow1", "Hauptmen\303\274", 0, QApplication::UnicodeUTF8));
menuProgramm->setTitle(QApplication::translate("MainWindow1", "Programm", 0, QApplication::UnicodeUTF8));
menuHilfe->setTitle(QApplication::translate("MainWindow1", "Hilfe", 0, QApplication::UnicodeUTF8));
menu_ber->setTitle(QApplication::translate("MainWindow1", "\303\234ber", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class MainWindow1: public Ui_MainWindow1 {};
} // namespace Ui
#endif // UI_MAINWINDOW1_H