Anzeige:
Ergebnis 1 bis 11 von 11

Thema: [QT] Problem mit QTable::currEditRow() weil protected

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55

    [QT] Problem mit QTable::currEditRow() weil protected

    Hallo,

    ich hab ein kleines Problem mit QTable::currEditRow.
    Damit möchte ich die aktuelle zeile in der tabelle herausfinden.
    Nur sagt mir der kompiler, das diese methode protected sei.

    aufrufen tu ich sie mit "int selectedRow = table -> currEditRow()"
    Muss ich die irgendwie anders aufrufen?

    Hatte ves auch schon mit currentRow() probiert.
    Das hat auch eigentlich gut funktioniert.
    Bloss das nimmt den wert der letzten zeile, obwohl ich nix in der tabelle selektiert habe und ist somit leider unbrauchbar für mich.

    Vielen dank im vorraus für eure hilfe und geduld mit mir.

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Ich denke die einzige Möglichkeit wird sein, von QTable zu erben und die Funktionalität entweder in einer neuen Memberfunktion unterzubringen oder die Methode nach außen forwarden.

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    so ungefähr?

    Code:
    class Table : public QTable
    {
    public:
    	Table();
    	~Table();
    };
    Die currEditRow() methode müsste doch jetzt verfügbar sein?
    Bin noch ziemlich der noob, was vererbung, kunstruktor, pointer usw. angeht.

    Muss ich dann nicht die komplette Tabelle mit dieser Klasse erstellen?
    Geändert von fraggo01 (20-08-2004 um 15:17 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Hab schon nen relativ guten erfolg gehabt.
    Nur funktionierts nicht wie es soll.
    So wird immer die erste zeile gelöscht:

    Code:
    class Table : public QTable
    {
    public:
        Table(){QTable::QTable();}
        int currEditRow();
    };
    Code:
    int Table::currEditRow()
    {
        QTable::currEditRow();
        return 0;
    }

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Die klasse muss von QWidget abgeleitet sein
    zu dem macht es wenig sin ein Table Klasse so einzubinden.
    PHP-Code:
    //HEADER
    class QTable;

    class 
    Table : public QWidget
    {
    Q_OBJECT
    public:
        
    Table(QWidget *parent 0, const char *name 0);
      
    QTableTabelle;
       ~
    Table();
        
    int currEditRow();
    }; 
    PHP-Code:
    #include <qtable.h>

    Table::Table(QWidget *parent, const char *name)
    {
          
    Tabelle = new QTablethis"Tabelle" );

    Hoffe es stimmt was ich da jetzt schnell hingeschrieben habe
    Geändert von undefined (20-08-2004 um 16:54 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Hab es jetzt so:

    header datei:
    Code:
    class QTable;
     
    class Table : public QWidget 
    { 
        Q_OBJECT 
    public: 
        Table(QWidget *parent = 0, const char *name = 0)
        { 
    	tabelle = new QTable( this, "tabelle" ); 
        }  
        QTable* tabelle; 
        ~Table(); 
        int currEditRow(); 
    };
    So rufe ich es auf:
    Code:
    Table tabelle(table);
        int selectedRow = tabelle.currEditRow();
    Fehler:
    Code:
    g++  -o tool .obj/main.o .obj/settings.o .obj/tvtool.o .obj/moc_settings.o .obj/moc_tvtool.o  -L/usr/lib/qt3//lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
    .obj/tvtool.o(.text+0x2a8c): In function `mainform::del_clicked()':
    : undefined reference to `Table::currEditRow()'
    .obj/tvtool.o(.text+0x2b1c): In function `mainform::del_clicked()':
    : undefined reference to `Table::~Table [in-charge]()'
    .obj/tvtool.o(.text+0x2b67): In function `mainform::del_clicked()':
    : undefined reference to `Table::~Table [in-charge]()'
    .obj/moc_settings.o(.gnu.linkonce.r._ZTV5Table+0x20): undefined reference to `Table::~Table [in-charge]()'
    .obj/moc_settings.o(.gnu.linkonce.r._ZTV5Table+0x24): undefined reference to `Table::~Table [in-charge deleting]()'
    .obj/moc_settings.o(.gnu.linkonce.r._ZTV5Table+0x1c8): undefined reference to `non-virtual thunk [nv:-40] to Table::~Table [in-charge]()'
    .obj/moc_settings.o(.gnu.linkonce.r._ZTV5Table+0x1cc): undefined reference to `non-virtual thunk [nv:-40] to Table::~Table [in-charge deleting]()'
    collect2: ld returned 1 exit status
    make: *** [tool] Fehler 1
    Geändert von fraggo01 (20-08-2004 um 20:50 Uhr)

  7. #7
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Jetzt nicht böse gemeint aber du machst gravierende Anfänger Fehler. Das sieht man daran das du nicht weist wie man eine Klasse anspricht. So etwas jetzt hier im Forum breitschlagen wäre einfach zu viel - Tip - Buch Kaufen und erst mal Lesen Das zweite was mir auffällt ist das deine Projekte anscheinend nicht richtig erstellt werden. Du hast Linker Fehler. Ich habe hier ein Faulenzer Script das ich immer bei kleineren QT Testanwendungen nehme. Erstelle damit erst einmal ein Paar kleiner Anwendungen und sehe dir den Code an.
    Code:
    #!/bin/bash
    #
    ############################################################################
    # License:            GPL 2
    # Version:            0.1.0
    # Requires:           gnu(gcc), make, qmake, progen, uic, sed, grep
    # SriptName:          qtgen.sh
    # Author:             undefined <undefined@flashbattle.de>
    # Kurz-Beschreibung:  Erstellt aus einer UI-Komponente eine 
    #                     Projektdatei und Makefile. Generiert eine 
    #                     QT-Standard main.cpp zum Testen der Anwendung
    #
    # Beschreibung: Dieses Script ist nur dafuer gedacht dem Programmierer beim
    #               Testen kleinerer Anwendungen zu Helfen die nur aus einer
    #               einzelnen UI-Komponente bestehen.
    ############################################################################
    # @author undefined
    # @since  18.08.2004
    # @short  Suche nach Klassenname in *.ui und Pruefe ob ein Projektname
    #         angegeben wurde.
    if [ -n "$2" ];then
     if [ -r "$2.ui" ];then
      cat $2.ui| grep '<class>[0-9a-zA-Z]*</class>' | 
      sed -e 's;.*<class>\([0-9a-zA-Z]*\).*;\1;' > .tmp
     fi
     CLASSNAME="`cat .tmp | grep '[0-9a-zA-Z]*'`"
    	PROJEKT=$2
    else
    	echo " Bitte setze den Projektnamen als zweiten Parameter!"
    	echo " Beispiel: $0 help ProjektName"
    	exit 1;
    fi
    
    # @author undefined
    # @since  18.08.2004
    # @short  Ausfuehrliche Ausgabe der Hilfe
    hilfe()
    {
     echo "Ausfuehrliche Beschreibung der Parameter.."
     echo " gen        ( Erstelle main.cpp $PROJEKT.pro Projekt Datei und Makefile. )"
     echo " autogen    ( Wie \"gen\" zusaetzlich mit \"make\" und Programm ausfuehren. )"
     echo " make_start ( Neu Compilieren und Programm ausfuehren. )"
     echo " clean      ( Projekt Normal aufraeumen *.pro und Makefile bleiben erhalten. )"
     echo " clean_full ( Alles entfernen Inklusive (*.pro *.cpp *.h und Makefile) entfernen )"
    	echo " convert    ( Generiere aus der *.ui Datei eine *.h und *.cpp Datei )"
    	echo " start      ( Programm Ausfuehren)"
    	echo "Beispiel:"
    	echo "$0 gen ProjektName"
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  Suche nach QMake von QT3
    # checkQMake=`qmake -v | grep 'Qmake'`
    # if [ ! -n "$checkQMake" ]; then
    # 	echo "Kann das Programm \"qmake\" nicht finden!"
    # 	exit 1;
    # fi
    
    # @author undefined
    # @since  18.08.2004
    # @short  Suche nach uic Anwendung von QT3
    # checkUic=`uic -version`
    # if [ ! -n "$checkUic" ]; then
    #  echo "Kann das Programm \"uic\" nicht finden!"
    #  exit 1;
    # fi
    
    # @author undefined
    # @since  18.08.2004
    # @short  Wenn kein "progen" vorhanden dann Handmade
    template()
    {
    echo "TEMPLATE   = app
    CONFIG     = qt warn_on release debug
    HEADERS    = `ls -f $1.ui.h`
    SOURCES    = main.cpp
    INTERFACES = `ls -f $1.ui`
    TARGET         = $1
    " > $1.pro
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  Projekt erstellen mit progen
    makepro()
    {
     checkProgen=`progen -n`
     if [ -n "$checkProgen" ]; then
      progen -d . -lower -n $PROJEKT -o $PROJEKT.pro
     else
    		template $PROJEKT
    	fi
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  
    aufraeumen()
    {
     make clean
     rm -f $PROJEKT.pro Makefile *.cpp $PROJEKT.h .tmp
     if [ -x "$PROJEKT" ]; then
      rm $PROJEKT
     fi
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  
    convertui()
    {
     if [ -r "$PROJEKT.ui" ]; then
    		uic -o $PROJEKT.h $PROJEKT.ui
    		uic -o $PROJEKT.cpp -i $PROJEKT.h $PROJEKT.ui
    	else
    		echo "Keine $PROJEKT.ui vorhanden!"
    		exit 1;
    	fi
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  
    makemain()
    {
    echo "/*****************************************************************/
    /* Generate with \"qtgen.sh\"                                      */
    /* License: GPL 2 Version: 0.1.0                                 */
    /* Author: undefined <undefined@flashbattle.de>                  */
    /*****************************************************************/
    // Erstellt am `date +"%d %m %Y %H:%I:%M"`
    
    #include <qapplication.h>
    #include \"$1.h\"
    
    int main( int argc, char **argv )
    {
        QApplication a( argc, argv );
    
        $2 w;
        a.setMainWidget( &w );
        w.show();
        return a.exec();
    }
    " > main.cpp
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  Erstelle Makefile
    makefile()
    {
     if [ -r "$PROJEKT.pro" ]; then
      qmake -unix $PROJEKT.pro -o Makefile
     fi
    }
    
    # @author undefined
    # @since  18.08.2004
    # @short  Starte Anwendung
    startpro()
    {
    	if [ -x "$PROJEKT" ];then
    		echo "Starte $PROJEKT"
    		./$PROJEKT
    	fi
    }
    
    # @author undefined
    # @since  18.08.2004
    case "$1" in
    'gen')
      echo "Erstelle main.cpp fuer Klasse: $CLASSNAME ..."
      makemain $PROJEKT $CLASSNAME
      echo "Erstelle Projekt Datei.."
      makepro
      echo "Erstelle Makfile.."
      makefile
            ;;
    'autogen')
    		if [ -e "Makefile" ];then
    			aufraeumen
    		fi
    		echo "Starte autogen fuer Klasse: $CLASSNAME ..."
    		if [ -e "main.cpp" ];then
    			TestMain="`cat main.cpp | grep $PROJEKT.h`"
    			if [ ! -n "$TestMain" ];then
    				makemain $PROJEKT $CLASSNAME
       fi
      else
       makemain $PROJEKT $CLASSNAME
      fi
      makepro && makefile && make && startpro
            ;;
    'make_start')
      make && startpro
            ;;
    'clean')
      make clean
            ;;
    'clean_full')
      aufraeumen
            ;;
    'convert')
      convertui
            ;;
    'start')
      startpro
            ;;
    'help')
      hilfe
            ;;
    *)
      echo "Falsche Parameter Angabe. Verwende:"
      echo "$0 {gen|autogen|make_start|clean|clean_full|convert|start|help} ProjektName"
      echo "Beispiel: $0 help ProjektName"
            exit 1
            ;;
    esac
    
    exit;
    PS:
    PHP-Code:
    int selectedRow tabelle->currEditRow(); 
    Geändert von undefined (21-08-2004 um 00:37 Uhr)

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von undefined
    Die klasse muss von QWidget abgeleitet sein
    Das ist sie ohnehin wenn sie von QTable ableitet, QTable ist schliesslich ein QWidget.

    Bishen aufpassen, wenn du einem Anfänger hilft, der macht dann sowas wie du unten vorgeschlagen hast.

    @fraggo01: Irgend ein spezieller Grund, warum du currentSelection() nicht benutzen kannst?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Jetzt nicht böse gemeint aber du machst gravierende Anfänger Fehler.
    Da bin ich bestimmt nicht böse, bin halt noch der vollnoob.
    Probleme mit ansprechen von "komplizierten" klassen...
    Auf jeden fall. Vor allem wenn konstruktoren usw gebraucht werden, da könnt ich graue haare kriegen.

    Ein buch kann ich mir leider nicht unbedingt leisten, wollte eigentlich versuchen es mit hilfe des inets zu schaffen.
    Habe da, denke ich, auch mehr oder weniger gute quellen.
    irgendwie habe ich auch immer alles mit hilfe des inets lösen können.


    Irgend ein spezieller Grund, warum du currentSelection() nicht benutzen kannst?
    Na ja, wenn ich in der tabelle keine zeile selektiere, dann wird die letzte zeile der tabelle gelöscht.
    Das soll aber nicht sein...
    Hab schon überlegt wie ich das abfangen könnte, wenn die tabelle nicht fokussiert ist, kann ja eigentlich nichts selektiert sein.
    Ansonsten hat currentSelection() einwandfrei funktioniert.
    Geändert von fraggo01 (21-08-2004 um 10:59 Uhr)

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von fraggo01
    Na ja, wenn ich in der tabelle keine zeile selektiere, dann wird die letzte zeile der tabelle gelöscht.
    Das soll aber nicht sein...
    Vielleicht hast du irrtümlich den Rückgabewert von currentSelection() nicht geprüft, ob das -1 ist, also keine Selection vorliegt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Sorry bin wohl durcheinander gekommen mit currentRow() und currentSelection().
    Jetzt gehts mit currentSelection(), vielen dank, für eure Hilfe.
    Geändert von fraggo01 (21-08-2004 um 13:46 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •