wxWidgets und editierbare Tabellen
-
Hallo,
Ich verstehe die Funktionsweise von
event.Skip()
nicht ganz. Also ich verstehe nicht, welche Funktion der Aufruf wie anspringt.Das Problem ist folgendes. Nach längerem ausprobieren, habe ich mich für wxDataViewListCtrl entschieden. Dabei ist mir aber aufgefallen, dass auch wenn eine Spalte mit
AppendTextColumn
und wxDATAVIEW_CELL_EDITABLE hinzugefügt wird, dass bei den Auslösern (z.B. Doppelklick oder Enter) für das editieren, es beim Doppelklick eine lästige Verzögerung gibt oder das Editieren gar nicht ausgelöst wird.Deshalb habe ich folgendes versucht, zuerst um die events mit der Memberfunktion zu verbinden:
Bind(wxEVT_DATAVIEW_ITEM_ACTIVATED, &DataTable::OnItemActivated, this); Bind(wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, &DataTable::OnItemActivated, this);
Dann folgendes:
void DataTable::OnItemActivated(wxDataViewEvent& event) { if (event.GetItem().IsOk() && event.GetDataViewColumn()) { dataCtrl->EditItem(event.GetItem(), event.GetDataViewColumn()); } else { event.Skip(); } //std::cout << event.GetSkipped() << '\n'; }
Beim Doppelklick ist
event.GetDataViewColumn()
nichtnullptr
. So wird das Editieren beim Doppelklick ohne lästige Verzögerung ausgelöst und es wird auch nicht oft "verschluckt". Beim Auslösen durch Enter wirdevent.Skip()
aufgerufen und dadurch das Editieren ausgelöst. Ich weiss aber nicht wo.Weiss jemand weiter?
-
@titan99_ Wenn
Skip()
aufgerufen wird, sucht die Event Loop weiter, ob noch ein Event Händler auf das Event wartet. In deinem Fall hast du aber verschiedene Events die den selben Handler haben.Das events verschluckt werden ist eher ungewöhnlich, kann man das zügig über ein Sample oder ein kleines Beispiel nachvollziehen?
-
@Schlangenmensch Danke für die Antwort
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Das events verschluckt werden ist eher ungewöhnlich, kann man das zügig über ein Sample oder ein kleines Beispiel nachvollziehen?
Es hat Samples wo mir die Verzögerung und das Verschlucken auch aufgefallen sind: dataview, listctrl (Ist ein anderes widget als das oben genannte, das anscheinend zusätzlich noch die Einschränkung nur die erste Spalte editieren zu können hat)
Edit: Ist zwar OT, aber mir ist auch verschwommener Text aufgefallen. Googelte "wxwidgets font blurry" und das ist anscheinend auch schon anderen aufgefallen wxWidgets Discussion Forum.
-
@titan99_ Hm, die Controls habe ich an verschiedenen Stellen selbst im Einsatz. Bisher ohne Probleme. Ich kann das aber erst am Montag gezielt ausprobieren. Welche WxWidgets Version verwendest du? Welches OS und welcher Compiler?
Zu High DPI Problemen kann ich grade nichts sagen, die konnte ich noch nicht selbst beobachten.
-
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Welche WxWidgets Version verwendest du? Welches OS und welcher Compiler?
Zur Zeit:
wxVERSION_STRING wxWidgets 3.1.4 OperatingSystemIdName Microsoft Windows NT ArchName 64 bit OSMajorVersion.OSMinorVersion.OSMicroVersion 10.0.18363 _MSC_VER 1924 _MSVC_LANG 201402 ContentScaleFactor 1
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Zu High DPI Problemen kann ich grade nichts sagen, die konnte ich noch nicht selbst beobachten.
Habe deswegen noch GetContentScaleFactor ausgegeben. Bei 15.6" Bildschirm habe ich eine Auflösung von Full HD bzw. 1920 x 1080 und eine Skalierung von 125%(empfohlen). Trotzdem ist ContentScaleFactor
1
und nicht1.25
.Edit:
void DataTable::OnItemActivated(wxDataViewEvent& event)
wird durch die VerbindungBind(wxEVT_DATAVIEW_ITEM_ACTIVATED, &DataTable::OnItemActivated, this)
ohne Verzögerung und auch ohne "Verschlucken" angesprungen, bei Doppelklick usw. Aber die Zelle wird nicht immer editierbar, deshalb habe ich EditItem aufgerufen (Sehe gerade, dass dies zu weiteren Problemen führt auf OSX/Carbon, da es laut Doku dort nicht implementiert ist).
-
@titan99_ Ok, was muss ich an einem Sample ändern um das Problem nachzuvollziehen? Ich habe grade das DataView Beispiel kompiliert und es lief alles, wie ich es erwartet hätte.
Das Editieren ist aber kein Doppelklick, wenn ich das grade richtig sehe, sondern ein einfacher Klick auf eine bereits ausgewählte Spalte. Ähnlich wie beim Windows Explorer, da kannst du auch Dateinamen ändern, wenn du einen einfachen Klick auf eine bereits ausgewählte Datei machst.Ändert sich der Scale Factor denn, wenn du die Skalierung änderst?
Wenn du das für OSX/Carbon brauchst, müsstest du das dann wohl selbst implementieren. Ist halt ein Community Project, jeder der mitmacht ist willkommen
-
Danke für die Antwort
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Ok, was muss ich an einem Sample ändern um das Problem nachzuvollziehen? Ich habe grade das DataView Beispiel kompiliert und es lief alles, wie ich es erwartet hätte.
Also ich habe
dataview.exe
mit dem FenstertitelwxDataViewCtrl sample
auch nochmals geöffnet. Was ich gerade sehe, ist dass das Problem mit der verschwommenen Schrift dort nicht besteht. Das Problem mit dem klicken besteht bei mir immer noch, wenn ich F2 oder Enter drücke, besteht es nicht. Benutzt du eine andere Plattform?@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Das Editieren ist aber kein Doppelklick, wenn ich das grade richtig sehe, sondern ein einfacher Klick auf eine bereits ausgewählte Spalte.
Gut möglich, wenn ich auf eine Reihe klicke und kurz warte und nochmals klicke, beginnt das Editieren. Wenn ich aber
wxEVT_DATAVIEW_ITEM_ACTIVATED
selbst bearbeite und dortEditItem
aufrufe, besteht das Problem gar nicht.@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Ändert sich der Scale Factor denn, wenn du die Skalierung änderst?
Habe es gerade ausprobiert, er ändert sich nicht, weder bei 100% noch bei 175%. Die verschwommene Schrift verschwindet bei 100%. Als Möglichkeit könnte ich versuchen herauszufinden, was beim DataView Beispiel anders ist, da ja dort die Schrift nicht verschommen ist.
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Wenn du das für OSX/Carbon brauchst, müsstest du das dann wohl selbst implementieren. Ist halt ein Community Project, jeder der mitmacht ist willkommen
Ich finde z.B. wxMaxima gut, welches auch wxWidgets braucht.
-
@titan99_ sagte in wxWidgets und editierbare Tabellen:
Danke für die Antwort
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:Ok, was muss ich an einem Sample ändern um das Problem nachzuvollziehen? Ich habe grade das DataView Beispiel kompiliert und es lief alles, wie ich es erwartet hätte.
Also ich habe dataview.exe mit dem Fenstertitel wxDataViewCtrl sample auch nochmals geöffnet. Was ich gerade sehe, ist dass das Problem mit der verschwommenen Schrift dort nicht besteht. Das Problem mit dem klicken besteht bei mir immer noch, wenn ich F2 oder Enter drücke, besteht es nicht. Benutzt du eine andere Plattform?
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:Das Editieren ist aber kein Doppelklick, wenn ich das grade richtig sehe, sondern ein einfacher Klick auf eine bereits ausgewählte Spalte.
Gut möglich, wenn ich auf eine Reihe klicke und kurz warte und nochmals klicke, beginnt das Editieren. Wenn ich aber wxEVT_DATAVIEW_ITEM_ACTIVATED selbst bearbeite und dort EditItem aufrufe, besteht das Problem gar nicht.
Im Moment wxWidgets 3.1.4 (aber ein etwas komischer Stand, da eine Änderung im Master bei mir rumzickt, bin da noch in Klärung mit dem Author ) mit noch win7 und VS2017.
Ich würde dein Problem mit dem Ändern dann als gelöst betrachten. Doppelklick ist halt nicht als "Änder" Befehl gedacht, wenn man das haben will muss man es selbst machen. Hast du, und es funktioniert, also perfekt.
Habe es gerade ausprobiert, er ändert sich nicht, weder bei 100% noch bei 175%. Die verschwommene Schrift verschwindet bei 100%. Als Möglichkeit könnte ich versuchen herauszufinden, was beim DataView Beispiel anders ist, da ja dort die Schrift nicht verschommen ist.
Ich habe irgendwo eine alte Diskussion auf der Mailingliste gefunden. Wenn deine Manifest Datei sagt, dass die Anwendung High DPI aware ist, sollte der Rest funktionieren. Aber das bekomme ich im Moment nicht getestet.
-
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Hast du, und es funktioniert, also perfekt.
Naja, perfekt finde ich es nicht.
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Habe es gerade ausprobiert, er ändert sich nicht, weder bei 100% noch bei 175%. Die verschwommene Schrift verschwindet bei 100%. Als Möglichkeit könnte ich versuchen herauszufinden, was beim DataView Beispiel anders ist, da ja dort die Schrift nicht verschommen ist.
Ich habe irgendwo eine alte Diskussion auf der Mailingliste gefunden. Wenn deine Manifest Datei sagt, dass die Anwendung High DPI aware ist, sollte der Rest funktionieren. Aber das bekomme ich im Moment nicht getestet.
Das DataView Beispiel ist ja nicht so gross. Hat jetzt nicht höchste Priorität, also ich verschiebe es auf später. Aber wenn dann werde ich versuchen herauszufinden was dort anders ist. Evtl. auch step by step eine App anfangen neu zu schreiben, bis das Problem auftritt. Vielleicht hat es auch mit OpenGL Canvas was zu tun, aber glaube eher nicht.
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Aber das bekomme ich im Moment nicht getestet.
Vielen Dank für die Hilfe. Im Moment hänge ich seit gestern bei probleme-mit-std-get_time.
-
@Schlangenmensch sagte in wxWidgets und editierbare Tabellen:
Habe es gerade ausprobiert, er ändert sich nicht, weder bei 100% noch bei 175%. Die verschwommene Schrift verschwindet bei 100%. Als Möglichkeit könnte ich versuchen herauszufinden, was beim DataView Beispiel anders ist, da ja dort die Schrift nicht verschommen ist.
Ich habe irgendwo eine alte Diskussion auf der Mailingliste gefunden. Wenn deine Manifest Datei sagt, dass die Anwendung High DPI aware ist, sollte der Rest funktionieren. Aber das bekomme ich im Moment nicht getestet.
Wenn deine Manifest Datei sagt, dass die Anwendung High DPI aware ist, sollte der Rest funktionieren.
Habe es heute nochmals versucht und auch noch heute endlich hinbekommen. Also anhand Make CMake-built samples on MSW DPI-aware habe ich eine Lösung gefunden.
@titan99_ sagte in wxWidgets und editierbare Tabellen:
Was ich gerade sehe, ist dass das Problem mit der verschwommenen Schrift dort nicht besteht.
Also bei den Samples.
Habe bei meiner CMakeLists.txt bei
add_executable
die bereits bei wxWidgets bestehende Manifest-Datei${wxWidgets_INCLUDE_DIRS}/wx/msw/amd64_dpi_aware.manifest
hinzugefügt. Die verschwommene Schrift ist verschwunden undframe->GetContentScaleFactor()
gibt1.25
aus, gemäss meiner Systemeinstellung.Nochmals vielen Dank für den Input