Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 22

Thema: Problem mit QContextMenu bzw. connect

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Question Problem mit QContextMenu bzw. connect

    Hallo Leute,

    ich versuche ein connect für ein QContextMenu einer Tabelle herzustellen, aber es erfolgt einfach keine Verbindung. Hier ist der Code:

    im Header:

    private slots:
    void slotContextMenu( int, int, const QPoint&);

    in der cpp-Datei:

    ...
    connect( table, SIGNAL( contextMenuRequested ( int, int, const QPoint& ) ), this, SLOT( slotContextMenu(int, int, const QPoint& ) ) ) ;
    ...

    void CHPIntensityWidget::slotContextMenu(int row, int col, const QPoint &point)
    {
    QPopupMenu *contextMenu = new QPopupMenu( this );

    ....

    contextMenu->exec( point );

    delete contextMenu;
    }

    Ich weiß nicht genau, wie und ob ich "const" und "&" verwenden muss. Ich habe auch schon alle möglichen Kombinationen ausprobiert (ohne &, ohne const, etc).

    Vielen Dank,
    Kirstin

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Die Signaturen sind ok.

    Gibt es eine Fehlermeldung zur Laufzeit?
    Wie ist der Rückgabewert von connect?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo anda_skoa,

    ich bekomme keine Fehlermeldung zur Laufzeit.
    Der Rückgabewert ist "false". Ich gebe eine Meldung aus, wenn if(! connect...) gilt. Die bekomme ich, also ist der Wert "false".

    Ich habe mal wieder keine Benachrichtigung erhalten, dass ich eine Antwort auf meine Frage habe. Woran kann das liegen? Meistens bekomme ich eine Mail, manchmal aber nicht.

    Schöne Grüße,
    Kirstin

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Nur zur Sicherheit:
    die Klasse hat das O_OBJECT Macro im Header?
    das moc File wir erzeugt, kompiliert und gelinkt?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Question

    Hallo anda_skoa,

    ich habe Q_OBJECT im Header und #include"moc_chpintensitywidget.cpp" in der cpp-Datei stehen. Beim Linken bekomme ich nur folgende Meldung: warning LNK4098: Standardbibliothek "msvcrt.lib" steht in Konflikt mit anderen Bibliotheken; /NODEFAULT:Bibliothek verwenden
    Keine Ahnung, was das bedeutet, aber ich bekomme die Meldung von Anfang an. Mein Programm läuft trotzdem.
    Allerdings hatte ich schon Mal ein Problem mit einem connect, in dem const und & vorkamen. Dort habe ich es auch nicht hinbekommen und dann anders realisiert. Es gab noch eine alte Funktion, die den dritten Parameter nicht benötigt (ist natürlich auch keine richtige Lösung). Ich glaube, dass es bei const und & irgendwas gibt, was man beachten muss, ich weiß nur nicht was. Zur Not muss ich einen Event-Filter einbauen. Das habe ich auch schon mal gemacht, als ich noch nicht wusste, dass es das Signal "contextMenuRequested" gibt. Aber damit löse ich das allgemeine Problem nicht.

    Schöne Grüße,
    Kirstin
    Kirstin

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Nachtrag

    Hallo anda_skoa,

    ich habe etwas herausgefunden: Ich hatte das gleiche Problem mit einem connect, in dem Widget* vorkam. Ich habe ein bisschen im Internet herumgesucht und herausgefunden, dass es auf die Leerzeichen ankommt. Widget* ist etwas anderes als Widget *. Da muss man ganz genau aufpassen. Liegt wohl daran, dass das connect in einen String umgewandelt wird. Jedenfalls läuft dieses connect bei mir jetzt. Ich dachte, dass damit auch das andere Problem gelöst werden könnte, aber irgendwie funktioniert es nicht. Ich habe alles Mögliche ausprobiert. Ich weiß nicht, was richtig ist, also const QPoint &, const QPoint&, QPoint&, QPoint & oder was auch immer. Im Qt-Buch steht als Beispiel const QString &, allerdings nicht, wie der slot dann tatsächlich aussieht.

    Vielleicht hast du ja noch eine Idee.

    Schöne Grüße,
    Kirstin

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Kirsche
    Ich habe ein bisschen im Internet herumgesucht und herausgefunden, dass es auf die Leerzeichen ankommt.
    Hmm, das ist mir neu.

    Ich weiß nicht, was richtig ist, also const QPoint &, const QPoint&, QPoint&, QPoint & oder was auch immer. Im Qt-Buch steht als Beispiel const QString &, allerdings nicht, wie der slot dann tatsächlich aussieht.
    Meine Notations ist immer const Typ&
    Hat bisher immer geklappt.

    Kontrollier besser noch, ob das moc File aktuell ist, also den Slot enthält.
    Im Zweifelsfalle neu erstellen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Question

    Hallo anda_skoa,

    ich habe alles neu kompiliert, aber es klappt einfach nicht. Das Dumme ist, dass es keine Fehlermeldung gibt. Weißt du, wie Fehlermeldungen, die Fehler in einem connect betreffen, ausgegeben werden können? Ich habe im Internet gesehen, dass manche so was wie "sender unknown" etc. erhalten. Im Qt-Buch stand das auch, allerdings nicht, wie man die Meldungen unter Visual C++ ausgibt. Vielleicht würden solche Meldungen weiterhelfen, um herauszubekommen, wo der Fehler liegt.

    Schöne Grüße,
    Kirstin

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Normalerweise kommen die auf der Konsole wenn man dort die Anwendung startet.

    Ich denke sogar unter Windows.

    Ansonsten gäbe es noch die Möglichkeit einen Message Handler zu installieren und die Messages in einem Fenster ausgeben zu lassen:
    http://doc.trolltech.com/3.3/qapplic...tallMsgHandler

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Question

    Hallo anda_skoa,

    danke für den Tipp. Ich habe es so gemacht, aber es wird nur eine einzige Fehlermeldung ausgegeben. Die betrifft zwar ein connect, aber wohl nicht dieses problematische. Wenn ich nämlich die Zeile mit dem connect, um das es geht, auskommentiere, tritt die Meldung immer noch auf. Langsam glaube ich, dass es das Signal "contextMenuRequested" irgendwie nicht gibt. Ich habe nun wirklich alles Mögliche ausprobiert. Hast du noch eine Idee?
    Kirstin

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Probier mal ein anderes Signal zum Testen.
    Eventuell ist dieses erst in einer späteren Version dazugekommen. Welche Qt Version setzt du da ein?

    Eine Alternative wäre noch von QTable abzuleiten und dann die Methode contentsContextMenuEvent zu überschreiben, oder mit einem Eventfilter am Viewport des Tables das ContextMenuEvent abfangen

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo anda_skoa,

    ich benutze 3.2.1 und auch das dazu passende Manual. Was für ein Signal soll ich denn stattdessen nehmen? Es muss ja auch von den Parametern passen. Die Variante mit dem Eventfilter habe ich an einer anderen Stelle so benutzt, und ich wollte es jetzt eigentlich "richtig" machen, wenn es schon dieses Signal gibt. Mit dem Eventfilter hätte ich zwar eine Möglichkeit, das Problem zu umgehen, ich würde es aber nicht lösen. Im Notfall mache ich es so, wenn mir wirklich nichts mehr einfällt.

    Schöne Grüße,
    Kirstin

  13. #13
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich meinte irgendein anderes QTable Signal, nur um zu testen ob dessen Connect klappt.

    Es ist nämlich schon komisch, daß connect false liefert, aber keine Meldung am stderr dafür erscheint.

    Eventuell in der CONFIG Zeile in der .pro Datei das Stichwort console hinzufügen, vielleicht braucht Windows das.

    Üblicherweise sind solche Problem meistens ein vergessenes Q_OBJECT Macro, oder ein nicht aktuelles moc File.
    Du könntest noch versuchen das #include des MOC Files weg zu lassen, dann wird es normalerweise als extra Datei kompiliert.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #14
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo anda_skoa,

    meine anderen connects in der Datei funktionieren, z.B. connect( table->verticalHeader(), SIGNAL( clicked( int ) ), this, SLOT( slotShowDiagrams( int ) ) );

    An einer anderen Stelle (andere Datei) wollte ein connect auch nicht funktionieren. Ich habe dann fast alle Leerzeichen entfernt, und plötzlich klappte es. Ich vermute, dass es hier irgendwie auf die Leerzeichen ankommt, ich weiß nur nicht wie.

    Ich habe keine .pro-Datei. Braucht man die unter Visual C++?

    Schöne Grüße,
    Kirstin
    Kirstin

  15. #15
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Kirsche
    meine anderen connects in der Datei funktionieren, z.B. connect( table->verticalHeader(), SIGNAL( clicked( int ) ), this, SLOT( slotShowDiagrams( int ) ) );
    Diese Slots zum selben Zeitpunkt hinzugefügt?

    Ich habe keine .pro-Datei. Braucht man die unter Visual C++?
    Nein, denke nicht.
    Ich arbeite in der Firma unter Windows nur mit qmake, nmake und dem cl Commandline Compiler.

    Vielleicht kann man diese Optionen irgendwie über das Qt Plugin von Visual Studio einstellen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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