Umformung von QWidget in QComboWidget...



  • Ich habe eine Tabelle gemacht, in die ich QComboWidgets eingebastelt habe. Das ganze geht ganz einfach mit dem Member

    setCellWidget( int row, int column, QWidget * widget )
    

    Nun habe ich ein Problem mit

    QWidget * QTableWidget::cellWidget ( int row, int column ) const
    

    Wie man sieht habe ich mir gedacht, dass damit ein Zeiger Auf das Widget (bei mir halt ein QComboWidget) zurückgeliefert wird...

    void FS::saveCellData(int row, int col)
    {
    	QString devLine;
    	QComboBox *temp_box;
    	QString curHeader = fstab->verticalHeaderItem(row)->text();
    
    	//connect columns of QTableWidget to QString
    	std::cout<<"config has been changed..."<<std::endl;
    	for(int i = 0; i < columns; i++)
    	{
    		temp_box = fstab->cellWidget(row, i);
    		if(i < columns - 1)
    			devLine.append(temp_box->currentText() + " ");
    		else devLine.append(temp_box->currentText() );
    	}
    
    	//..and write QString in str_hard_devices
    	std::cout<<devLine.toStdString()<<" will get saved"<<std::endl;
    	for(int i = 0; i < str_hard_devices.size(); i++)
    	{
    		if(str_hard_devices.at(i).contains(curHeader) )
    		{
    			str_hard_devices.replace(i, devLine);
    		}
    	}
    }
    

    Das passiert auch, aber wirklich halt nur auf ein QWidget. Leider funktioniert damit die Funktion auch gar nicht mehr...

    FS.cpp: In member function `void FS::saveCellData(int, int)':
    FS.cpp:149: Fehler: Ungültige Umformung von »QWidget*« in »QComboBox*«
    FS.cpp: At global scope:
    FS.cpp:140: Warnung: nicht benutzter Parameter »col«
    make: *** [FS.o] Fehler 1
    

    Das hat mich etwas entrüstet, schließlich funktioniert es ja statt ein QWidget eine abgeleitete Klasse für x-beliebige Dinge einzusetzen, aber wird ein QWidget zurückgegeben, kann keine Umformung stattfinden, abwohl die Daten in der Zelle eindeutig passen würden, ich habe ja nur Combos.

    Wie kann ich also diesen Fehler umgehen 😕



  • hi das geht da du ein konstanten Zeiger von CellWidget zurückbekommst.

    Gruss,
    xmarvel



  • hmm, ich hab jetzt nicht ganz verstanden, was geht? fügs doch einfach in meinen code ein, dann seh ichs besser...



  • hi meinte es geht nicht wegem dem const bei der cellWidget Methode



  • oh, je dass ist jetzt ein großes problem!!!

    außerdem verstehe ich dann auch nicht mehr den sinn dieser member-funktion. ich meine was nützt mir denn ein scheiß QWidget?! ich habe schließlich ein QComboBoxes einfügt...

    die misere ist nämlich die..

    ich habe eine QTableWidget die dynamisch groß ist... d.h. dass ich für jede zeile ein new QComboWidget aufrufe.
    Ich muss aber an die daten wenn irgendeine zelle verändert wird... wie mach ich denn das jetzt nur...

    könnte ich irgendwie die methode neu schreiben, bloß wie?!



  • in welchem ordner sind die qt implementierungen? in Qt-4.1.4/include/QtGui finde ich nur die klassen (*.h) aber wo sind die *.cpp-dateien?



  • gentoo schrieb:

    ich habe eine QTableWidget die dynamisch groß ist... d.h. dass ich für jede zeile ein new QComboWidget aufrufe.
    Ich muss aber an die daten wenn irgendeine zelle verändert wird... wie mach ich denn das jetzt nur...

    schau dir mal QItemDelegate an oder das Beispiel dazu.

    gentoo schrieb:

    in welchem ordner sind die qt implementierungen? in Qt-4.1.4/include/QtGui finde ich nur die klassen (*.h) aber wo sind die *.cpp-dateien?

    lad dir die sourcen von der trolltech seite runter.
    du hast warscheinlich qt über dein system installiert der liefert die cpp nicht mit wozu auch.

    Gruss,
    xmarvel



  • das war zwar nicht das was ich vorhatte, scheint aber etwas eleganter zu sein. danke... nur finde ich es trotzdem schade, dass man keine templates verwendet?!

    ich fand, dass dies am einfachsten gewesen wäre. 🙄

    template<class T>
    T *cellWidget(int, int) const;
    

    aber mir scheint dein beispiel sowieso besser zu gefallen... darum danke 👍


Log in to reply