Seite 1 von 1

QComboBox - selectRow???

Verfasst: 29. Juli 2008 13:09
von Hulk2442
HI
Ich bin gerade dabei die Bedingung einer QComboBox mittels Tastatur zu lösen.
Bin jedoch an einem Punkt gelandet wo ich mich im Kreis drehe und nicht weiter komme.

Das Problem ist das wenn ich die Liste dieser Box öffne ich mittels Tasten hindurch scrollen möchte. Was jedoch irgendwie nicht so ganz funktionieren will.
Zwar wird der Index gesetzt jedoch nicht der Eintrag in der Liste hervorgehoben.

Dabei sei noch gesagt das zum scrollen nicht die Pfeiltasten verwendet werden.

Eine Lösung habe ich gefunden indem ich das Popupfenster durch ein neuerliches Zeichnen neu Zeichne und somit dem gewollten Effekt erzwinge!
Gibt es jedoch vielleicht eine Besser Lösung???

Siehe dazu folgenden Code.

Code: Alles auswählen

#include <QApplication>
#include <QWidget>
#include <QComboBox>
#include <QString>
#include <QKeyEvent>

class MyWidget : public QWidget
{
	public:
		QComboBox *pCombo;
		
		MyWidget()
		{
			pCombo = new QComboBox(this);
			pCombo->addItem("1 - Eins");
			pCombo->addItem("2 - Zwei");
			pCombo->addItem("3 - Drei");
			
			grabKeyboard();
		}
		
		void keyPressEvent(QKeyEvent *pEvent)
		{
			switch( pEvent->key() )
			{
				case Qt::Key_A:
					pCombo->showPopup();
					break;
				
				case Qt::Key_W:		//<<---------------  select next row
					pCombo->setCurrentIndex(1);
					pCombo->showPopup();
					break;
				
				case Qt::Key_S:		//<<---------------  select prev row
					pCombo->setCurrentIndex(0);
					pCombo->showPopup();
					break;
				
				case Qt::Key_D:
					pCombo->hidePopup();
					break;
				
				default:
					break;
			}
		}
};

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	
	MyWidget widget;
	widget.show();
	
	return app.exec();
}
TIA

Verfasst: 29. Juli 2008 14:01
von upsala
Gibt es jedoch vielleicht eine Besser Lösung???
Bei mir macht das QComboBox von Haus aus...

Verfasst: 29. Juli 2008 14:50
von Hulk2442
Meinst du du das Programm eins zu eins?
Wenn ja dann hast du recht aber auch nur weill der "showPopup" Befehl mehrmals aufgeruffen wird.

Code: Alles auswählen

            case Qt::Key_W:      
               pCombo->setCurrentIndex(1);
               pCombo->showPopup();             //<<---------------  Vermeidbar????
               break;
            
            case Qt::Key_S:
               pCombo->setCurrentIndex(0);
               pCombo->showPopup();             //<<---------------  Vermeidbar????
               break; 
Genau das möchte ich ja vermeiden.