Seite 1 von 2
Problem mit QComboBox
Verfasst: 17. Oktober 2006 14:57
von KingV1k
Hi
mein Problem ist das dashier nicht funktioniert:
Code: Alles auswählen
QObject::connect(comboBox, SIGNAL(highlighted()), MainWindow, SLOT(close()));
obwohl dashier funktioniert:
Code: Alles auswählen
QObject::connect(btnClose, SIGNAL(clicked()), MainWindow, SLOT(close()));
comboBox ist QComboBox <== ist eigentlich auch logisch
Ich benutze Qt 4.2
Es werden keine Fehlermeldungen beim compilieren ausgegeben.
Hat jemand eine Idee?
Verfasst: 17. Oktober 2006 16:25
von macman
Ich kann mir nicht vorstellen, das es ein Signal highlighted ohne Parameter gibt. Dazu brauch ich nicht mal die Doku

Also wird da nichts connected und das wirst Du bei einem Debuglauf auch sehen.
Verfasst: 18. Oktober 2006 08:12
von KingV1k
sorry hab ich nur vergessen einzufügen. ich hab es mit den werten 0, 1,2 und 3 probiert. hat aber trotzdem nicht geklappt. also vielleicht hab ich die doku falsch verstanden, aber mit diesen werten klappt es auch nicht.
Verfasst: 18. Oktober 2006 11:45
von KingV1k
tut mir leid, das ich hier soviel schreibe, aber es ist wichtig für mich. also hat jemand eine idee?
Mit freundlich Grüßen
KingV1k
Verfasst: 18. Oktober 2006 12:03
von Christian81
Wo hast Du denn da Werte gesetzt? Wenn ich richtig liege und du hast
Code: Alles auswählen
QObject::connect(comboBox, SIGNAL(highlighted(1)), MainWindow, SLOT(close()));
gemacht, dann würde ich sagen Du schaust Dir Signals und Slots nochmal genau an. Sowas ist nämlich weder möglich noch logisch...
Verfasst: 18. Oktober 2006 12:06
von Vaaco
Hi,
der richtige Aufruf wäre:
QObject::connect(comboBox, SIGNAL(highlighted(int)), MainWindow, SLOT(close()));
oder
QObject::connect(comboBox, SIGNAL(highlighted(QString)), MainWindow, SLOT(close()));
Verfasst: 18. Oktober 2006 13:36
von KingV1k
das versteh ich nicht ganz. wie übergib ich ihm dann den wert? welchen wert hat int in diesem moment? versteht ihr was ich meine
Verfasst: 18. Oktober 2006 13:59
von Christian81
Ich wusste doch dass es keinen Sinn hat ihm das vorzukauen.
@KingV1k: Beschäftige dich bitte mit den
Qt-Tutorial und werde Dir im klaren wie
Signals und Slots funktionieren! Falls Du Fragen dazu hast werden wir Dir gerne weiterhelfen, aber ganz ohne Grundkenntnisse geht es nunmal nicht!
Verfasst: 18. Oktober 2006 14:09
von Vaaco
Es wäre wirklich besser wenn du erstmal das Tutorial durcharbeiten würdest.
Zu deiner Frage:
Mit connect erstellst du lediglich eine Verbindung zwischen dem Signal und dem Slot, d.h. in diesem Moment hat dein int keinen Wert.
Dein int bekommt erst dann einen Wert wenn das Signal tatsächlich ausgelöst wurde, in diesem Fall sobald ein Benutzer etwas in der ComboBox auswählt. int hat dann den Wert des entsprechenden index.
Verfasst: 18. Oktober 2006 14:37
von KingV1k
ok ich habs jetzt durchgelesen, aber irgnedwie will es noch immer nicht.
Code: Alles auswählen
public slots:
void testfunktion(int testvar)
{
comboBox->addItem("String");
pBarStatus->setValue(80);
}
.........
........
.........
QObject::connect(comboBox, SIGNAL(highlighted(int)), MainWindow, SLOT(testfunktion(int)));
eigentlich müsste doch ein int wert meiner funktion übergeben werden. macht es aber nicht. es ändert sich nichts an meiner gui. wieso?
Verfasst: 18. Oktober 2006 14:51
von Vaaco
Dein Slot testfunktion bekommt von dem Signal highlighted einen integer wert übergeben, sobald jemand in der comboBox etwas anwählt.
Verfasst: 18. Oktober 2006 15:06
von KingV1k
genau das selbe dachte ich auch, aber es passiert nichts.cverstehst du was ich meine?
Verfasst: 18. Oktober 2006 15:21
von Vaaco
Starte das Programm mal im Debug Modus und suche im Ausgabefenster nach der Meldung "Object::connect: No such slot ..."
Wenn du fündig wirst ist dein connect fehlgeschlagen. Das wird nicht vom Compiler bemängelt, daher der Umweg über debug.
Verfasst: 19. Oktober 2006 08:38
von KingV1k
mein problem hat sich noch immer nicht gelöst, deswegen poste ich mal den quellcode:
main.cpp
Code: Alles auswählen
#include <QApplication>
#include <QtGui>
#include <QtCore>
#include "ui_untitled.h"
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//cout<<"testttt"<<endl;
QMainWindow *window = new QMainWindow();
Ui::MainWindow ui;
ui.setupUi(window);
window->show();
return app.exec();
}
ui_untitled.h
Code: Alles auswählen
/********************************************************************************
** Form generated from reading ui file 'untitled.ui'
**
** Created: Mon 16. Oct 09:49:12 2006
** by: Qt User Interface Compiler version 4.2.0
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/
#ifndef UI_UNTITLED_H
#define UI_UNTITLED_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QComboBox>
#include <QtGui/QFrame>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QProgressBar>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>
class Ui_MainWindow
{
public slots:
void testfunktion(const QString testvar)
{
comboBox->addItem("String");
pBarStatus->setValue(70);
}
public:
QWidget *centralwidget;
QLabel *lblUeberschrift;
QLabel *lblStatus;
QFrame *line;
QPushButton *btnCreate;
QPushButton *btnClose;
QComboBox *comboBox;
QProgressBar *pBarStatus;
QLineEdit *lineEditStatus;
void setupUi(QMainWindow *MainWindow)
{
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
lblUeberschrift = new QLabel(centralwidget);
lblUeberschrift->setObjectName(QString::fromUtf8("lblUeberschrift"));
lblUeberschrift->setGeometry(QRect(20, 20, 191, 31));
lblStatus = new QLabel(centralwidget);
lblStatus->setObjectName(QString::fromUtf8("lblStatus"));
lblStatus->setGeometry(QRect(290, 20, 51, 31));
line = new QFrame(centralwidget);
line->setObjectName(QString::fromUtf8("line"));
line->setGeometry(QRect(260, -10, 20, 191));
line->setFrameShape(QFrame::VLine);
line->setFrameShadow(QFrame::Sunken);
btnCreate = new QPushButton(centralwidget);
btnCreate->setObjectName(QString::fromUtf8("btnCreate"));
btnCreate->setGeometry(QRect(20, 120, 141, 41));
btnClose = new QPushButton(centralwidget);
btnClose->setObjectName(QString::fromUtf8("btnClose"));
btnClose->setGeometry(QRect(170, 120, 81, 41));
comboBox = new QComboBox(centralwidget);
comboBox->setObjectName(QString::fromUtf8("comboBox"));
comboBox->setGeometry(QRect(20, 60, 231, 22));
comboBox->setMouseTracking(true);
comboBox->setMaxVisibleItems(10);
//added die comboBox-Items
comboBox->addItem("No validator2");
comboBox->addItem("No validator3");
comboBox->addItem("No validator4");
comboBox->addItem("No validator5");
comboBox->addItem("No validator6");
//end
pBarStatus = new QProgressBar(centralwidget);
pBarStatus->setObjectName(QString::fromUtf8("pBarStatus"));
pBarStatus->setGeometry(QRect(290, 140, 118, 23));
pBarStatus->setValue(50);
pBarStatus->setOrientation(Qt::Horizontal);
lineEditStatus = new QLineEdit(centralwidget);
lineEditStatus->setObjectName(QString::fromUtf8("lineEditStatus"));
lineEditStatus->setGeometry(QRect(290, 60, 121, 61));
lineEditStatus->setReadOnly(true);
MainWindow->setCentralWidget(centralwidget);
QWidget::setTabOrder(comboBox, btnCreate);
QWidget::setTabOrder(btnCreate, btnClose);
QWidget::setTabOrder(btnClose, lineEditStatus);
retranslateUi(MainWindow);
QSize size(437, 181);
size = size.expandedTo(MainWindow->minimumSizeHint());
MainWindow->resize(size);
QObject::connect(btnClose, SIGNAL(clicked()), MainWindow, SLOT(close()));
QObject::connect(btnCreate, SIGNAL(clicked()), MainWindow, SLOT(close()));
QObject::connect(comboBox, SIGNAL(highlighted(const QString &)), MainWindow, SLOT(testfunktion(const QString &)));
pBarStatus->setValue(80);
//QObject::connect(comboBox, SIGNAL(highlighted(const QString &)), MainWindow, SLOT(close()));
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "Create ISO", 0, QApplication::UnicodeUTF8));
lblUeberschrift->setText(QApplication::translate("MainWindow", "Altiris Deployment Server ausw\303\244hlen:", 0, QApplication::UnicodeUTF8));
lblStatus->setText(QApplication::translate("MainWindow", "Status:", 0, QApplication::UnicodeUTF8));
btnCreate->setText(QApplication::translate("MainWindow", "Boot-ISO erstellen", 0, QApplication::UnicodeUTF8));
btnClose->setText(QApplication::translate("MainWindow", "Schlie\303\237en", 0, QApplication::UnicodeUTF8));
lineEditStatus->setText(QString());
Q_UNUSED(MainWindow);
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
#endif // UI_UNTITLED_H
Verfasst: 19. Oktober 2006 11:47
von Vaaco
Vorweg mal was Allgemeines:
Die ui_.h Datei ist Tabu! Da solltest du nichts dran ändern! Besser du leitest dir eine Klasse von UI_MainWindow ab und änderst darin sämtliche Einstellungen!
Zu deinem Problem:
Versuch mal das hier:
connect(comboBox, SIGNAL(highlighted(const QString &)), this, SLOT(testfunktion(const QString &)));
Das sollte funktionieren!