ubuntuusers.de

[C++] Programm mit .glade-GUI verbinden

Status: Gelöst | Ubuntu-Version: Ubuntu 9.04 (Jaunty Jackalope)
Antworten |

Glocke

Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

Hallo,

ich habe ein kleines C++-Programm geschrieben zum Würfeln 😛 Dazu habe ich mit Glade3 eine GUI erstellt, die atm im .glade-Format vorliegt. Wenn ich das richtig verstanden habe, stehen mir zwei Wege offen die GUI einzubinden: GtkBuilder (erstellt eine C-Biliothek) und libglade oder so (zum direkten Laden der .glade zur Laufzeit). Nur irgendwie bekomme ich das nicht hin, egal welche Art ich versuche: mir fehlen Bibliotheken o.O

Vllt. stell ich mich einfach auch nur zu blöd an, deshalb meine Frage: Wie würdet ihr die GUI einbinden? (Ich brauche nicht mehr, als eine gültige Instanz des Fensters. Die Komponenten ansprechen bekomme ich hin ☺

Btw wer will kann mir auch allgemeine Tipps zu meinem Programm geben, ich bin zwar kein absoluter Newbie mehr, aber den ein oder anderen Makel gibt es mit Sicherheit noch auszubügeln 😛

Hab hier mal alle relevanten Quelltexte angehangen:

main.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include "DiceGame.h"

using namespace std;

int main() {
    int iHelp;
    TDiceGame MyGame;

    cout << "Würfelzahl: ";
    cin >> iHelp;

    if (MyGame.setUser(iHelp))
    {
        if (MyGame.getWin())
        {
            cout << "Glückwunsch, richtig!" << endl;
        }
        else
        {
            cout << "Sorry, " << MyGame.getDice() << " wäre die richtige Zahl gewesen." << endl;
        }
    }
    else
    {
        cout << "Die Zahl kann nicht mit einem W6 gewürfelt werden!" << endl;
    }

    return 0;
}

DiceGame.h

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdlib.h> // wegen Zufallszahl

// struct for game
struct TDiceGame
{
    private:
    int iUser;
    int iDice;
    bool bWin;

    public:
    TDiceGame();
    bool setUser(int);
    int getDice(void);
    bool getWin(void);
};

// constructor
TDiceGame::TDiceGame()
{
    iUser = 0;
    iDice = 0;
    bWin = false;
}

// set user input, roll dice if input is valid
bool TDiceGame::setUser(int iParameter)
{
    if ((iParameter >= 1) and (iParameter <= 6))
    {
        iUser = iParameter;
        srand (time(NULL));
        iDice = rand() % 6 + 1;
        bWin = (iDice == iUser);
        return true;
    }
    else
    {
        return false;
    }
}

// get diced number
int TDiceGame::getDice(void)
{
    return iDice;
}
// returns win or loss
bool TDiceGame::getWin(void)
{
    return bWin;
}

wuerfelspiel.glade

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?xml version="1.0"?>
<glade-interface>
  <!-- interface-requires gtk+ 2.16 -->
  <!-- interface-naming-policy toplevel-contextual -->
  <widget class="GtkWindow" id="frmMain">
    <property name="visible">True</property>
    <property name="title" translatable="yes">W&#xFC;rfelspiel</property>
    <property name="window_position">center</property>
    <child>
      <widget class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <child>
          <widget class="GtkHBox" id="hbox2">
            <property name="visible">True</property>
            <child>
              <widget class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="label" translatable="yes">Mein W&#xFC;rfeltipp:</property>
              </widget>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <widget class="GtkEntry" id="edtInput">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="invisible_char">&#x25CF;</property>
              </widget>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <widget class="GtkHBox" id="hbox3">
            <property name="visible">True</property>
            <property name="homogeneous">True</property>
            <child>
              <widget class="GtkButton" id="btnDice">
                <property name="label" translatable="yes">W&#xFC;rfeln!</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_underline">True</property>
              </widget>
              <packing>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="btnClose">
                <property name="label" translatable="yes">Schlie&#xDF;en</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_underline">True</property>
              </widget>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>

scrawl

Anmeldungsdatum:
12. Dezember 2007

Beiträge: 1779

Nur irgendwie bekomme ich das nicht hin, egal welche Art ich versuche: mir fehlen Bibliotheken o.O

Hast du die -dev Pakete von libglade installiert?

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

Meinst du das Paket http://packages.ubuntu.com/jaunty/libglade2-dev ? Das ist installiert.

/usr/include/libglade-2.0/glade/glade-build.h
/usr/include/libglade-2.0/glade/glade.h
/usr/include/libglade-2.0/glade/glade-init.h
/usr/include/libglade-2.0/glade/glade-parser.h
/usr/include/libglade-2.0/glade/glade-xml.h

Code::Blocks findet aber die Header (vgl. http://www.jamesh.id.au/software/libglade/)

1
2
#include <gtk/gtk.h>
#include <glade/glade.h>

nicht (nebenbei: die Header für z.B. mysql auch nicht, und die sind ebenfalls vorhanden /usr/include/mysql glaube).

*grml* ich glaub ich hab Code::Blocks nicht richtig konfiguriert, oder? Kann mir jmd. sagen wo ich den Suchpfad für die Header einstellen kann? *schäm*

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Du kannst ja mal die absoluten Pfade includen,

1
#include "/usr/include/libglade-2.0/glade/glade.h"

und halt genauso für den gtk Header.

Und wenn es ein Fehler wegen fehlenden Bibliotheken ist, müsste doch dem Linker was Fehlen, oder?

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

Das Problem ist, die Header selber binden wiederum andere Header ein. Ich müsste also alle relativen Pfade auf absolute umstellen, und das ist ja nicht Sinn der Sache ^^

Würde erstmal das hier rauskommen 😛

1
2
3
4
//#include <gtk/gtk.h>
//#include <glade/glade.h>
#include "/usr/include/libglade-2.0/glade/glade.h"
#include "/usr/include/gtk-2.0/gtk/gtk.h"
/usr/include/libglade-2.0/glade/glade.h|25|Fehler: glib.h: No such file or directory|
/usr/include/libglade-2.0/glade/glade.h|27|Fehler: glade/glade-init.h: No such file or directory|
/usr/include/libglade-2.0/glade/glade.h|28|Fehler: glade/glade-xml.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|32|Fehler: gdk/gdk.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|33|Fehler: gtk/gtkaboutdialog.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|34|Fehler: gtk/gtkaccelgroup.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|35|Fehler: gtk/gtkaccellabel.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|36|Fehler: gtk/gtkaccelmap.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|37|Fehler: gtk/gtkaccessible.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|38|Fehler: gtk/gtkaction.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|39|Fehler: gtk/gtkactiongroup.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|40|Fehler: gtk/gtkactivatable.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|41|Fehler: gtk/gtkadjustment.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|42|Fehler: gtk/gtkalignment.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|43|Fehler: gtk/gtkarrow.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|44|Fehler: gtk/gtkaspectframe.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|45|Fehler: gtk/gtkassistant.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|46|Fehler: gtk/gtkbbox.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|47|Fehler: gtk/gtkbin.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|48|Fehler: gtk/gtkbindings.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|49|Fehler: gtk/gtkbox.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|50|Fehler: gtk/gtkbuildable.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|51|Fehler: gtk/gtkbuilder.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|52|Fehler: gtk/gtkbutton.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|53|Fehler: gtk/gtkcalendar.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|54|Fehler: gtk/gtkcelleditable.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|55|Fehler: gtk/gtkcelllayout.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|56|Fehler: gtk/gtkcellrenderer.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|57|Fehler: gtk/gtkcellrendereraccel.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|58|Fehler: gtk/gtkcellrenderercombo.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|59|Fehler: gtk/gtkcellrendererpixbuf.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|60|Fehler: gtk/gtkcellrendererprogress.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|61|Fehler: gtk/gtkcellrendererspin.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|62|Fehler: gtk/gtkcellrenderertext.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|63|Fehler: gtk/gtkcellrenderertoggle.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|64|Fehler: gtk/gtkcellview.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|65|Fehler: gtk/gtkcheckbutton.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|66|Fehler: gtk/gtkcheckmenuitem.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|67|Fehler: gtk/gtkclipboard.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|68|Fehler: gtk/gtkcolorbutton.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|69|Fehler: gtk/gtkcolorsel.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|70|Fehler: gtk/gtkcolorseldialog.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|71|Fehler: gtk/gtkcombobox.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|72|Fehler: gtk/gtkcomboboxentry.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|73|Fehler: gtk/gtkcontainer.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|74|Fehler: gtk/gtkcurve.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|75|Fehler: gtk/gtkdebug.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|76|Fehler: gtk/gtkdialog.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|77|Fehler: gtk/gtkdnd.h: No such file or directory|
/usr/include/gtk-2.0/gtk/gtk.h|78|Fehler: gtk/gtkdrawingarea.h: No such file or directory|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build finished: 50 errors, 0 warnings ===|

Eigentlich muss ich dem Projekt doch nur sagen, dass sich die Header /irgendwo/auf/meiner/festplatte/befinden und er sich dann aus dem Verzeichnis die Dateien heraussucht, oder? Ich weiß nur nicht wo ich das einstellen soll ☹

Hab das hier mal versucht, aber ohne Erfolg: Project > Build options > Search directories > Compiler > Add > "/usr/include"

1
2
#include <gtk/gtk.h>
#include <glade/glade.h>
Fehler: gtk/gtk.h: No such file or directory|
Fehler: glade/glade.h: No such file or directory|

allerdings sind die Header dort drinnen. Hab das Verzeichnis mal auf /usr/include/gtk-2.0 gesetzt und jetzt kommt richtig ekelhafter output

-------------- Build: Debug in wuerfelspiel ---------------

Compiling: main.cpp
In Datei, eingefügt von /usr/include/gtk-2.0/gdk/gdk.h:32,
                 von /usr/include/gtk-2.0/gtk/gtk.h:32,
                 von /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30:21: Fehler: gio/gio.h: No such file or directory
In Datei, eingefügt von /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:31,
                 von /usr/include/gtk-2.0/gdk/gdk.h:32,
                 von /usr/include/gtk-2.0/gtk/gtk.h:32,
                 von /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk/gdkscreen.h:31:19: Fehler: cairo.h: No such file or directory
In Datei, eingefügt von /usr/include/gtk-2.0/gdk/gdkscreen.h:32,
                 von /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:31,
                 von /usr/include/gtk-2.0/gdk/gdk.h:32,
                 von /usr/include/gtk-2.0/gtk/gtk.h:32,
                 von /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk/gdktypes.h:36:18: Fehler: glib.h: No such file or directory
/usr/include/gtk-2.0/gdk/gdktypes.h:37:25: Fehler: pango/pango.h: No such file or directory
/usr/include/gtk-2.0/gdk/gdktypes.h:38:25: Fehler: glib-object.h: No such file or directory
/usr/include/gtk-2.0/gdk/gdktypes.h:55:23: Fehler: gdkconfig.h: No such file or directory
In Datei, eingefügt von /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h:39,
                 von /usr/include/gtk-2.0/gdk/gdkpixbuf.h:37,
                 von /usr/include/gtk-2.0/gdk/gdkcairo.h:28,
                 von /usr/include/gtk-2.0/gdk/gdk.h:33,
                 von /usr/include/gtk-2.0/gtk/gtk.h:32,
                 von /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-io.h:38:21: Fehler: gmodule.h: No such file or directory
In Datei, eingefügt von /usr/include/gtk-2.0/gdk/gdk.h:33,
                 von /usr/include/gtk-2.0/gtk/gtk.h:32,
                 von /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk/gdkcairo.h:29:30: Fehler: pango/pangocairo.h: No such file or directory
In Datei, eingefügt von /usr/include/gtk-2.0/gtk/gtkcontainer.h:35,
                 von /usr/include/gtk-2.0/gtk/gtkbin.h:35,
                 von /usr/include/gtk-2.0/gtk/gtkwindow.h:36,
                 von /usr/include/gtk-2.0/gtk/gtkdialog.h:35,
                 von /usr/include/gtk-2.0/gtk/gtkaboutdialog.h:32,
                 von /usr/include/gtk-2.0/gtk/gtk.h:33,
                 von /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gtk/gtkwidget.h:40:21: Fehler: atk/atk.h: No such file or directory
/home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:4:25: Fehler: glade/glade.h: No such file or directory
/home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:16: Fehler: verirrtes »\305« im Programm
/home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:16: Fehler: verirrtes »\234« im Programm
/home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:16: Fehler: verirrtes »\305« im Programm
/home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:16: Fehler: verirrtes »\234« im Programm
In file included from /usr/include/gtk-2.0/gdk/gdkscreen.h:32,
                 from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:31,
                 from /usr/include/gtk-2.0/gdk/gdk.h:32,
                 from /usr/include/gtk-2.0/gtk/gtk.h:32,
                 from /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk/gdktypes.h:68: Fehler: expected constructor, destructor, or type conversion before »typedef«
/usr/include/gtk-2.0/gdk/gdktypes.h:78: Fehler: »guint32« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:91: Fehler: »guint32« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:178: Fehler: typedef »GdkInputFunction« ist initialisiert (stattdessen lieber __typeof__ verwenden)
/usr/include/gtk-2.0/gdk/gdktypes.h:178: Fehler: »gpointer« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk-2.0/gdk/gdktypes.h:179: Fehler: »gint« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk-2.0/gdk/gdktypes.h:180: Fehler: expected primary-expression before »condition«
/usr/include/gtk-2.0/gdk/gdktypes.h:184: Fehler: typedef »GdkDestroyNotify« ist initialisiert (stattdessen lieber __typeof__ verwenden)
/usr/include/gtk-2.0/gdk/gdktypes.h:184: Fehler: »gpointer« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk-2.0/gdk/gdktypes.h:190: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:191: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:196: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:197: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:198: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:199: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:204: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:205: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:206: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:207: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:212: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:213: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:214: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdktypes.h:217: Fehler: »G_END_DECLS« bezeichnet keinen Typ
In file included from /usr/include/gtk-2.0/gdk/gdkevents.h:34,
                 from /usr/include/gtk-2.0/gdk/gdkdisplay.h:32,
                 from /usr/include/gtk-2.0/gdk/gdkscreen.h:33,
                 from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:31,
                 from /usr/include/gtk-2.0/gdk/gdk.h:32,
                 from /usr/include/gtk-2.0/gtk/gtk.h:32,
                 from /home/glocke/Programmierung/CodeBlocks/wuerfelspiel/main.cpp:3:
/usr/include/gtk-2.0/gdk/gdkcolor.h:71: Fehler: »GObject« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:74: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:80: Fehler: »gpointer« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:85: Fehler: »GObjectClass« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:89: Fehler: »GType« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:92: Fehler: »gboolean« wurde nicht deklariert
/usr/include/gtk-2.0/gdk/gdkcolor.h:106: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:112: Fehler: »gint« wurde nicht deklariert
/usr/include/gtk-2.0/gdk/gdkcolor.h:115: Fehler: »gint« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:121: Fehler: »gboolean« bezeichnet keinen Typ
/usr/include/gtk-2.0/gdk/gdkcolor.h:127: Fehler: »gint« wurde nicht deklariert
/usr/include/gtk-2.0/gdk/gdkcolor.h:129: Fehler: »gulong« wurde nicht deklariert
/usr/include/gtk-2.0/gdk/gdkcolor.h:136: Fehler: »gboolean« bezeichnet keinen Typ

Das Programm steht, zeigt aber nichts an (auch die Konsole nicht mehr).

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Ubs, dass mit den Header einbindendenden Header hab ich vergessen 😳

Wenn es dafür keine Einstellungsmöglichkeit gibt, musst du dein Kompilier und den Link Befehl selbst anpassen, also

`pkg-config libglade-2.0 --cflags`

für den Compiler und

`pkg-config libglade-2.0 --libs`

für den Linker einfügen.

MfG
Yoschi

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

Ich bin mir sicher, dafür gibt es eine Einstellmöglichkeit. Nur bin ich zu doof die zu finden ☹

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

Englisch ist kein Problem.

Supi! Es geht.

`pkg-config --libs gtk+-2.0 libglade-2.0`

und jetzt frisst er die Header 😛

Ich teste mal weiter ob ich es hin bekomme die UI anzeigen zulassen ☺ Schonmal besten Dank :-*

STRIKE! es funzt!

Bin wie gesagt hier nach gegangen http://www.jamesh.id.au/software/libglade/

Nur eine Frage hab ich noch ☺

Worin besteht der Unterschied zwischen

1
2
3
int main(int argc, char **argv)
{
}

und

1
2
3
int main()
{
}

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Die beiden Parameter der main() Funktion werden vom Betriebssystem übergeben. zB. wird bei dem Befehl

mkdir Ordner

"Ordner" an das Programm übergeben. Das erste Argument bestimmt dabei die Anzahl der Argumente von 0 aus, der Programmaufruf zählt dabei auch. Das zweite Argument ist ein Zeiger auf ein char Feld, welches die Argumente enthält. Also in oberen Beispiel wäre argc=2, argv[0]="mkdir" und argv[1]="Ordner".
Das die Argumente dabei "argc" und "argv" heißen, hat sich so eingebürgert, ist aber nicht verpflichtend.
Außerdem ist es besserer Stil (mal vom praktischen Nutzen abgesehen).

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

okay, danke schön.

Aber eine Frage stellt sich mir direkt hinterher: wie spreche ich eine Komponente an? (ja ich bekomme es doch nicht hin xD)

bin jetzt soweit:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <gtk/gtk.h>
#include <glade/glade.h>

using namespace std;

// prototypes
void on_btnDice_clicked();

int main(int argc, char **argv)
{
    GladeXML *xml;
    GtkWidget *widget;

    gtk_init(&argc, &argv);
    xml = glade_xml_new("wuerfelspiel.glade", NULL, NULL);

    widget = glade_xml_get_widget(xml, "frmMain");

    // hier "verbinde" ich das Signal "on_btnDice_clicked" mit der void on_btnDice_clicked
    glade_xml_signal_connect(xml, "on_btnDice_clicked", G_CALLBACK (on_btnDice_clicked));

    g_object_unref(G_OBJECT (xml));

    gtk_main();

    return 0;
}

void on_btnDice_clicked()
{
    /*    zum Test eine Ausgabe in der Konsole
    hier soll aber sowas hin:

    int i = (int)widget.edtInput.Text;

    oder sowas in der Art halt, um von der Entry-Komponente des Widgets den eingegeben Text auszulesen :P    */

    cout << "hallo\n";
}

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Kenne mich zwar mit GTK nicht aus, aber wie kommst du auf das Signal "on_btnDice_clicked" ?
Ensteht das aus "on_" + Widget id + was_wurde_gemacht???

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

hab ich selber so genannt, aber genau aus dem grund en du genannt hast. hätte auch "horst" nehmen können oder "foo" *g*

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

KAnn sein, dass ich es überlesen habe, zumindest habe ich es nicht in deinem Code gefunden.

Hab ein Bisschen gegoogled, bin darauf auf sowas gestoßen:

1
glade_xml_get_widget (xml, "btnDice") -> connect ("clicked", G_CALLBACK (on_btnDice_clicked));

und die Callback Funktion benötigt noch ein Parameter des Types GtkWidget*. (bitte nicht schimpfen, wenn es nicht funktioniert/stimmt, wie gesagt in ich totaler Anfänger in GTK und hab das mir jetzt aus einer viertelstunde Docu lesen zusammengebastelt)

Glocke

(Themenstarter)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

nee funktioniert nicht 😛 muss aber auch nicht

dass der button auf nen click reagiert funzt ja, nur will ich versuchen aus der "Entry"-Komponente den Text auszulesen und in eine Variable zu speichern. Ich hab keinen Plan wie ich die Entrykomponente ansprechen soll ... 😢

Antworten |