Funktion wir überlagert. HELP!
-
Achso, dann sollte der Slot aber on_pushButton_connect_clicked() heissen.
Leider funktioniert das auch nicht. Ich habe gerade festgestellt, dass es bei mir nicht klappt auch nur irgendeinen Slot aufzurufen.
-
erm, was?
app.exec() ist das einzige, was ich aufrufe. oder verstehe ich da was nicht?
Die main, die vorhins gepostet habe, ist meine komplette main.Ich kompilier nur 4 Dateien:
main.cpp
server.h
server.cpp
server_ui.h
-
5000_Watt schrieb:
Achso, dann sollte der Slot aber on_pushButton_connect_clicked() heissen.
Leider funktioniert das auch nicht. Ich habe gerade festgestellt, dass es bei mir nicht klappt auch nur irgendeinen Slot aufzurufen.
wenn dein button "pushButton_connect" heißt - ja
wenn der dialog modal aufgerufen wird, wovon ich ausgehe wird app.exec() erst nach dem beenden des dialogs ausgeführt. demnach werden für den dialog keine events ausgeliefert weil noch keine eventqueue gestartet wurde (eben durch app.exec()).
-
Und was mach ich jetzt?
Meine main.cpp:
#include <QApplication> #include "server.h" #include <iostream> int main(int argc, char *argv[]) { QApplication app(argc,argv); server *dialog = new server("Server"); //char name[21] = {'S','e','r','v','e','r','\0'}; dialog->show(); return app.exec(); }
-
zeig ma deine "server.h"
-
server.h:
#ifndef SOCKSRV_H #define SOCKSRV_H #include "ui_server.h" #include <winsock2.h> #include <QTimer> class server : public QWidget, private Ui::Form_server { private: char *name; int GetLenghtOf(char str[]); SOCKET s; SOCKET acceptSocket; QTimer *accept_timer; public: /*! \brief Der standard-konstruktor, welcher einen Socket vorbereitet * \param *n ein zeiger auf einen String, welcher den Namen des Benutzers angibt */ server(char *n); /*! \brief Startet die Winsock einheit * wird benötigt, um Sockets verwenden zu können * \return 0, wenn erfolgreich, sonst einen fehlercode */ int startWinsock(void); public slots: void CheckForNewConnections(); void OpenNewSocketConnection(void); void sendmsg(); void receivemsg(); }; #endif
leider noch nicht überall kommentare.
-
class server : public QWidget, private Ui::Form_server
leite deine klasse mal von QMainWindow ab
leider noch nicht überall kommentare.
what's hard to write should be hard to read
-
Schade, hift auch nicht.
Mein Änderungen:
server.h
#include "ui_server.h" #include <QMainWindow> #include <winsock2.h> #include <QTimer> class server : public QMainWindow, private Ui::Form_server
Gleiches Problem, gleicher Effekt.
-
bool Connect(....)
Creates a connection of the given type from the signal in the sender object to the method in the receiver object. Returns true if the connection succeeds; otherwise returns false.
daraufhin habe ich mein programm abgeändert:
Konstruktor:
... bool conaccept = connect(pushButton_connect, SIGNAL(clicked(void)), this, SLOT(OpenNewSocketConnection(void))); if(conaccept == true){ textEdit_log->append(QString("Connect hat funktioniert")); }else{ textEdit_log->append(QString("Fehler: connect")); } ...
und ich habe eine neue Ausgabe:
Fehler: connect Winsock gestartet! Socket erstellt! Socket an port 12345 gebunden acceptSocket ist im listen Modus....
Also scheitert bereits das Veringen und nicht das Aufrufen.
-
im konstruktor deiner klasse muss noch:
ui.setupUi(this);
pushbutton ist member der ui-klasse, also
connect(ui.pushButton_connect, SIGNAL(clicked(void)), this, SLOT(OpenNewSocketConnection(void)));
-
Irgendwie wirft das bei mir auch nur Fehler. Hab jetzt alle Varianten durchprobiert, von ui.pushButton... bist Ui::Form_server::pushButton.
Hilft leider nichts.
-
ui_server.h zeigen
-
ui_server.h
/******************************************************************************** ** Form generated from reading ui file 'server.ui' ** ** Created: Sun 17. Feb 12:49:03 2008 ** by: Qt User Interface Compiler version 4.3.0 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************************/ #ifndef UI_SERVER_H #define UI_SERVER_H #include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QLineEdit> #include <QtGui/QPushButton> #include <QtGui/QTextEdit> #include <QtGui/QWidget> class Ui_Form_server { public: QLineEdit *lineEdit_IP; QPushButton *pushButton_connect; QTextEdit *textEdit_log; QLineEdit *lineEdit_text; QPushButton *pushButton_send; void setupUi(QWidget *Form_server) { if (Form_server->objectName().isEmpty()) Form_server->setObjectName(QString::fromUtf8("Form_server")); QSize size(400, 290); size = size.expandedTo(Form_server->minimumSizeHint()); Form_server->resize(size); lineEdit_IP = new QLineEdit(Form_server); lineEdit_IP->setObjectName(QString::fromUtf8("lineEdit_IP")); lineEdit_IP->setGeometry(QRect(10, 10, 251, 20)); pushButton_connect = new QPushButton(Form_server); pushButton_connect->setObjectName(QString::fromUtf8("pushButton_connect")); pushButton_connect->setGeometry(QRect(270, 10, 111, 23)); textEdit_log = new QTextEdit(Form_server); textEdit_log->setObjectName(QString::fromUtf8("textEdit_log")); textEdit_log->setGeometry(QRect(10, 40, 371, 201)); lineEdit_text = new QLineEdit(Form_server); lineEdit_text->setObjectName(QString::fromUtf8("lineEdit_text")); lineEdit_text->setGeometry(QRect(10, 250, 281, 20)); pushButton_send = new QPushButton(Form_server); pushButton_send->setObjectName(QString::fromUtf8("pushButton_send")); pushButton_send->setGeometry(QRect(300, 250, 81, 23)); retranslateUi(Form_server); QObject::connect(lineEdit_IP, SIGNAL(returnPressed()), pushButton_connect, SLOT(animateClick())); QObject::connect(lineEdit_text, SIGNAL(returnPressed()), pushButton_send, SLOT(animateClick())); QMetaObject::connectSlotsByName(Form_server); } // setupUi void retranslateUi(QWidget *Form_server) { Form_server->setWindowTitle(QApplication::translate("Form_server", "Form", 0, QApplication::UnicodeUTF8)); pushButton_connect->setText(QApplication::translate("Form_server", "Verbinden", 0, QApplication::UnicodeUTF8)); pushButton_send->setText(QApplication::translate("Form_server", "Senden", 0, QApplication::UnicodeUTF8)); Q_UNUSED(Form_server); } // retranslateUi }; namespace Ui { class Form_server: public Ui_Form_server {}; } // namespace Ui #endif // UI_SERVER_H
-
Form_server.setupUi(this);
und
connect(Form_server.pushButton_connect, SIGNAL(clicked(void)), this, SLOT(OpenNewSocketConnection(void)));
-
MinGw Fehler:
server.cpp:28: error: expected primary-expression before '.' token
server.cpp:32: error: expected primary-expression before '.' tokenbesser ist doch:
bool conaccept = connect(Form_server::pushButton_connect, SIGNAL(clicked(void)), this, SLOT(OpenNewSocketConnection(void)));
und:
Form_server::setupUi(this);
Leider erhalte ich immernoch meine fehlermeldung und bei einem Buttondruck passiert ebenfalls nichts.
-
ICH HABS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Och ne, ich bin d**m, b**d und vorallem blind!
Seht euch mal diesen Code an:
class server : public QWidget, private Ui::Form_server { private:
Denk ihr nich, dass da sowas wie... hingehört?
class server : public QWidget, private Ui::Form_server { Q_OBJECT private:
Ich bin auf der richtigen Spur!
Leider bekomme ich jetzt jede menge fehler:
release\server.o(.text+0xc43):server.cpp: undefined reference to `vtable for ser ver'
-
Diese fehler habe ich durch ein qmake wegbekommen.
Jetzt geht alles, auch meie Meldung lautet jetzt "Connect hat funktioniert".
Sorry, dass ich euch mit sowas genervt habe. Boar, ich bin so häppi, das es jetzt geht...
... dafür bekommt ihr alle einen virtuellen Keks.
DDDD A NN N K K EEEEEE !!!! D D A A NNN N K K E !!!! D D AAAAA N NN N KK K EEEE !!!! DDDD A A N NNN K k E !!!! EEEEEE !! !! !!!! !!
-
man, war das ne schwere geburt, lol.
QObject. -.- ich habs auch nicht gesehenlol
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.