C Programm funktioniert nicht Richtig?

Codeline  13.02.2025, 18:17

Liege ich mit meiner Einschätzung richtig, dass hier ein wenig ChatGPT oder Ähnliches im Einsatz gewesen sind?

Fischi885 
Beitragsersteller
 13.02.2025, 19:18

Das stimmt, ganz so gut kenne ich mich noch nicht aus. Ich kann Code relativ gut lesen, aber noch nicht gut schreiben, da ich mich erst mit den Möglichkeiten vertraut machen muss.

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Offenbar wird on_search_changed() nicht oder zum falschen Zeitpunkt aufgerufen. Dann wird die Suche bei jeder Änderung nur eingeschränkt.

Hast Du in Glade wirklich ein Gtk.SearchEntry (mit find- und clear-Button) angelegt?Wenn ja, bau mal eine Ausgabe des Suchtextes in on_search_changed() ein. Erscheint da immer der aktuelle Suchtext?


Fischi885 
Beitragsersteller
 14.02.2025, 00:07

Jap, das SeachEntry habe ich, es wird an sich auch alles angezeigt. ich habe noch einige Tests gemacht. Es kommen sowohl die richtigen gboolean Werte bei der filter_func raus, als auch wird der richtige Suchtext sowohl in der filter_func, als auch in der on_search_changed() funktion angezeigt. Allein vom output her müsste es eigentlich funktionieren.

ralphdieter  14.02.2025, 00:10
@Fischi885

Dann zeig mal Deine "part1.glade", damit ich (oder jemand anderes) es ausprobieren kann.

Welche gtk-Version verwendest Du?

Fischi885 
Beitragsersteller
 14.02.2025, 00:23
@ralphdieter

Ich verwende die glade Version 3.40.0. Leider kann ich die Datei hier nicht einfügen, und der Code ist zu lang, falls du mir sagen könntest, wie ich es weiterleiten kann, wäre ich sehr dankbar.

ralphdieter  14.02.2025, 00:29
@Fischi885

Zu lang, bei 3 Objekten??? Dann bastle ich mir lieber selber etwas -- aber erst am Wochenende.

Fischi885 
Beitragsersteller
 14.02.2025, 00:30
@ralphdieter
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
  <requires lib="gtk+" version="3.24"/>
  <object class="GtkWindow" id="main_window">
    <property name="can-focus">False</property>
    <child>
      <object class="GtkBox" id="Box">
        <property name="visible">True</property>
        <property name="can-focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkSearchEntry" id="search_entry">
            <property name="visible">True</property>
            <property name="can-focus">True</property>
            <property name="activates-default">True</property>
            <property name="primary-icon-name">edit-find-symbolic</property>
            <property name="primary-icon-activatable">False</property>
            <property name="primary-icon-sensitive">False</property>
            <property name="input-purpose">digits</property>
            <signal name="search-changed" handler="on_search_changed" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkTreeView" id="treeview">
            <property name="visible">True</property>
            <property name="can-focus">True</property>
            <property name="headers-clickable">False</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
</interface>
Fischi885 
Beitragsersteller
 14.02.2025, 00:30
@Fischi885

ah, ich hatte es oben probiert, da können nur 5000 zeichen sein, aber als kommentar geht anscheinend mehr, tut mir leid.

ralphdieter  14.02.2025, 09:04
@Fischi885

Ich kann dein Problem jetzt nachvollziehen, habe aber noch keine Erklärung dafür.

Auffällig ist, dass nach einem Backspace jede Zeile zweimal verglichen wird. Entweder ist der Iterator kaputt, oder der Filter läuft zweimal gleichzeitig.

Oder was komplett anderes :-/

Fischi885 
Beitragsersteller
 14.02.2025, 09:35
@ralphdieter

Also gibt es eher nicht viel was ich tun kann? :-/

ralphdieter  15.02.2025, 01:53
@Fischi885

AUTSCH! Gib mal 0 2 Backspace ein. Dann siehst Du nur die Zeilen 1002 und 1003 (statt alle). Und jetzt klick in die Tabelle und drück ein paar mal Pfeil-rauf und -runter ... voilà, es ist alles da!

Sprich: Es funktioniert alles, aber Du hast im .gradle expand=False gesetzt (Zeile 36). Der Filter verkleinert die Tabelle automatisch, macht sie aber nur größer, wenn sie 0 Zeilen anzeigt.

Am besten packst Du die TreeView in Gradle in ein ScrolledWindow.

Fischi885 
Beitragsersteller
 15.02.2025, 11:20
@ralphdieter

das mit dem scrolledWindow hat perfekt geholfen. Da fühl ich mich fast schon schlecht, weil ich deine Zeit so verschwendet habe. Vielen vielen dank.

Sofern du jetzt nicht extreme.Performance benötigst verwende zum Suchen einen Regex. Die sind flexibler.

Für die Aufgabe die du willst brauchst du aber auch einfach nur zu prüfen ob der String mit der Nummer beginnt.

Also 1002 1003 1004 usw beginnen eben alle mit 100 dazu musst du nicht nur prüfen dass 100 drinnen vorkommt sondern dieser Substring am Anfang steht.

Also kein Vergleich auf ungleich 0 sondern strstr (str1,str2) == str1

Versuch doch mal nen eigenen Code zu schreiben. Mit ChatGPT lernst du nichts und stellst dir selbst nur ein Bein. Du verstehst den Code nicht weil du ihn nicht geschrieben hast. Und genau an diesem Punkt solltest du arbeiten.