Comunidad Gambas-es
[SOLUCIONADO] ¿Como determinar si un programa usa GTK o QT? - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forumdisplay.php?fid=3)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forumdisplay.php?fid=8)
+--- Tema: [SOLUCIONADO] ¿Como determinar si un programa usa GTK o QT? (/showthread.php?tid=1041)



¿Como determinar si un programa usa GTK o QT? - tincho - 23-09-2022

Hola.
¿Alguien podria decir como saber en tiempo de ejecución que componente usa un programa?
Busco una forma similar a como se hace para saber si el tema de escritorio es dark o no.
Ej:
GAMBAS
  1. If Application.DarkTheme Then
  2.   Print "Hi Anakin"
  3.   Print "Hi Obi-Wan"


Nota: Existen algunas llamadas (no se si es el temino correcto) a OpenGL que no funcionan en GTK3 mientras que en QT5 si lo hacen. Entonces deseo eludir lo que no funciona cuando el programa corre.
Ademas de la solucion que propuso Charly, agrego dos maneras mas de abordar el tema que recibi por la lista internacional de gambas:
GAMBAS
  1.   If Component.IsLoaded("gb.gtk3") Then
  2.     Print "Benoit dice que el toolkit es:" & "gb.gtk3"
  3.  
  4.   Print "Bruce dice que el toolkit es:" & Env["GB_GUI"]




Gracias.


RE: ¿Como determinar si un programa usa GTK o QT? - cogier - 24-09-2022

Espero que este código haga lo que quieres.

GAMBAS
  1. ' Gambas class file
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   Dim GridView1 As GridView
  6.   Dim sData As New String[]
  7.   Dim MyComponent As Component
  8.   Dim sLib As String
  9.   Dim iCol, iRow As Integer
  10.   Dim sHeader As String[] = ["Component.Name", "Component.Version", "Component.Library"]
  11.  
  12.   For Each MyComponent In Components
  13.     If MyComponent.Library = True Then sLib = "True" Else sLib = "False"
  14.     sData.Add(MyComponent.Name & "," & MyComponent.Version & "," & sLib)
  15.   Next
  16.  
  17.   With Me
  18.     .Height = 400
  19.     .Width = 450
  20.     .Padding = 5
  21.     .Arrangement = Arrange.Vertical
  22.     .Center
  23.  
  24.   With GridView1 = New GridView(Me) As "Gridview1"
  25.     .Clear
  26.     .Rows.Count = sData.Count
  27.     .Columns.Count = 3
  28.     .Expand = True
  29.     .Header = Gridview.both
  30.  
  31.   For iCol = 0 To 2
  32.     Gridview1.Columns[iCol].Title = sHeader[iCol]
  33.   Next
  34.  
  35.   For iRow = 0 To sData.Max
  36.     For iCol = 0 To 2
  37.       Gridview1[iRow, iCol].Text = Split(sData[iRow])[iCol]
  38.     Next
  39.   Next
  40.  
  41.   GridView1.Columns.Width = -1
  42.  





RE: ¿Como determinar si un programa usa GTK o QT? - tincho - 24-09-2022

(24-09-2022, 17:54)cogier escribió:  Espero que este código haga lo que quieres.

Si, muy didactico, le agregue una funcion y un panel con un boton para mostrar que toolkit usa el programa.
GAMBAS
  1. ' Gambas class file
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   Dim GridView1 As GridView
  6.   Dim sData As New String[]
  7.   Dim MyComponent As Component
  8.   Dim sLib As String
  9.   Dim iCol, iRow As Integer
  10.   Dim sHeader As String[] = ["Component.Name", "Component.Version", "Component.Library"]
  11.  
  12.   Dim pnl As Panel
  13.   Dim btn As Button
  14.  
  15.   For Each MyComponent In Components
  16.     If MyComponent.Library = True Then sLib = "True" Else sLib = "False"
  17.     sData.Add(MyComponent.Name & "," & MyComponent.Version & "," & sLib)
  18.   Next
  19.  
  20.   With pnl = New Panel(Me) As "Panel1"
  21.     .h = 42
  22.     .w = 120
  23.     .Arrangement = Arrange.Horizontal
  24.     .Margin = True
  25.  
  26.   With btn = New Button(pnl) As "Button11"
  27.     .h = 42
  28.     .w = 60
  29.     If gtkToolkit() Then
  30.       .Text = "GTK"
  31.     Else
  32.       .Text = "QT"
  33.     Endif
  34.  
  35.  
  36.   With Me
  37.     .Height = 400
  38.     .Width = 450
  39.     .Padding = 5
  40.     .Arrangement = Arrange.Vertical
  41.     .Center
  42.  
  43.   With GridView1 = New GridView(Me) As "Gridview1"
  44.     .Clear
  45.     .Rows.Count = sData.Count
  46.     .Columns.Count = 3
  47.     .Expand = True
  48.     .Header = Gridview.both
  49.  
  50.   For iCol = 0 To 2
  51.     Gridview1.Columns[iCol].Title = sHeader[iCol]
  52.   Next
  53.  
  54.   For iRow = 0 To sData.Max
  55.     For iCol = 0 To 2
  56.       Gridview1[iRow, iCol].Text = Split(sData[iRow])[iCol]
  57.     Next
  58.   Next
  59.  
  60.   GridView1.Columns.Width = -1
  61.  
  62.  
  63. Public Function gtkToolkit() As Boolean
  64.  
  65.   Dim MyComponent As Component
  66.   Dim bgtk As Boolean
  67.  
  68.   For Each MyComponent In Components
  69.     If MyComponent.Name = "gb.gtk3" Then
  70.       bgtk = True
  71.       Break
  72.     Endif
  73.   Next
  74.  
  75.   Return bgtk
  76.  





RE: ¿Como determinar si un programa usa GTK o QT? - Shell - 26-09-2022

Buenas!.

Tengo un proyecto que está hecho para QT5. Los componentes que están en uso o cargados son: (por defecto).

gb.form
gb.gui.qt
gb.image

He seleccionado que el gui que se inicie con QT5 en cambio aparece gb.gui.qt (eso es raro) y también he seleccionado el componente qt5 manualmente
para ver la diferencia. La respuesta en la lista del GridView en la columna de Component.Library siempre es Falso.Que no son librerías.

[Imagen: 039Zy53.png]

Incluso he probado con el componente gb.cairo que dice que es una "librería gráfica", pero luego me dice el ejemplo que no es una librería. Confused

Saludos