Seite 1 von 1

ComboButton

Verfasst: 2. Januar 2007 17:40
von area2051
Hallo Leute,
ich will eine ComboBox erzeugen, die 2 inhalte besitzt.
bei einem wechsel der auswahl, soll eine funktion aufgerufen werden.
Irgendwie kriege ich es nicht hin, die Box mit inhalt zu füllen.
Der Compiler gibt immer unbekannte funktion bei insertItem().
Anscheinend bestücke ich die funktion mit falschen parametern.
Wenn ich die Box auf editable setze und ich selber zwei Texte eingebe und hin und her wechsel, wird die funktion aber auch nicht ausgeführt, ggf. ist die box falsch initialisiert? eventhandler falsch?
Wäre dankbar über jede Hilfe!!!

Vllt könnte mal kurz einer drübergucken:

Code: Alles auswählen


QComboBox *Window::createBox(const char *changedSignal, const char *setterSlot)
{

    QComboBox *box= new QComboBox();
    box->setEditable(true); 
    connect(box, SIGNAL(activated (int index)), glWidget, setterSlot);
    connect(glWidget, changedSignal, box, SLOT(activated ( int index )));

    return box;
}

hier ein kleiner auszuszug :

Code: Alles auswählen

Window::Window()
{
    ...
	mybox=createBox(SIGNAL(comboboxchanged(int)), SLOT(setcurrentValue(int)));

    QHBoxLayout *mainLayout = new QHBoxLayout;

    QVBoxLayout* vlayout = new QVBoxLayout;
   
	vlayout->addWidget(mybox);
for ( int i=1; i<=7; i++ ) 
    {   // und irgendwie mit Inhalt füllen.            
      QString str;
      str.sprintf( "%d-ter Eintrag", i );
      mybox->insertItem(str);
    }
	
    mainLayout->addLayout(vlayout);
    mainLayout->addWidget(glWidget);
   
      
    ....
}


Verfasst: 2. Januar 2007 17:44
von area2051
hier die fehlermeldung:

Code: Alles auswählen

window.cpp: In constructor `Window::Window()':
window.cpp:88: error: no matching function for call to `QComboBox::insertItem(QS
tring&)'
C:/Qt/4.2.2/include/QtGui/../../src/gui/widgets/qcombobox.h:304: note: candidate
s are: void QComboBox::insertItem(int, const QString&, const QVariant&)
C:/Qt/4.2.2/include/QtGui/../../src/gui/widgets/qcombobox.h:180: note:
       void QComboBox::insertItem(int, const QIcon&, const QString&, const QVari
ant&)

Verfasst: 2. Januar 2007 23:14
von upsala
Hast du dir die Doku zu QComboBox mal durchgelesen? Insbesondere zu insertItem? Du bekommst ja vom Compiler sogar die richtige Verwendung vorgeschlagen. Aber kurz gesagt: Ersetz insertItem durch addItem...

Verfasst: 2. Januar 2007 23:46
von area2051
PRIMA Antwort!
Vielen Dank für deine Mühe!
Das hat direkt geklappt!
...
Nur leider funktioniert anscheinend der Eventhandler nicht ganz von der ComboBox. Er soll eine funktion aufrufen und einen wert auf true setzen, oder false, je nachdem welches object aus der liste ausgewählt wird.
Könntest du mal gucken, ob der Eventhanlder richtig geschrieben ist?
Dies ist mein erster ausflug in QT und bin daher noch etwas frisch ;)

Liebe Grüße,
Mark

Verfasst: 3. Januar 2007 00:02
von upsala

Code: Alles auswählen

connect(box, SIGNAL(activated (int index)), glWidget, setterSlot); 
connect(glWidget, changedSignal, box, SLOT(activated ( int index ))); 
In Signal bzw. Slot-Definitionen darf nur der Typ angegeben werden und keine sonstigen Bezeichnungen. Außerdem hat QComboBox keinen SLOT activated. Aber dies wird alles während des Programmablaufs auch auf der Konsole gemeldet...

Verfasst: 3. Januar 2007 00:20
von area2051
hehe. also bei mir wird leider gar nix gemeldet als fehler.
Vllt ist es gut als hintergrundinfo:
ich hab eine programmiervorlage, die ich ergänzen soll (eben um diese ComboBox).

in dieser ist die funktionsfähige Funktion enthalten:

Code: Alles auswählen

QSlider *Window::createSlider(const char *changedSignal, const char *setterSlot)
{

    QSlider *slider = new QSlider(Qt::Vertical);
    slider->setRange(0, 360 );
    slider->setPageStep(15);
    slider->setTickInterval(15);
    slider->setTickPosition(QSlider::TicksLeft);
    connect(slider, SIGNAL(valueChanged(int)), glWidget, setterSlot);
    connect(glWidget, changedSignal, slider, SLOT(setValue(int)));

    return slider;
}
da hab ich mir gedacht, ich bastel mir die gleiche Funktion, nur nicht für nen Slider, sondern für ne Box.
Hab also die funktion umgeändert. wie oben beschrieben.

jedoch ruft er meine neu Funktion bei mir nicht auf :(
also muss es wohl am eventhanlder liegen.