Nagel mich nicht drauf fest, aber ich meine Raspbians Visualisierung läuft mit GTK+2.
Wäre daher naheliegend, mit GTK zu arbeiten.
GtkFileChooserDialog
Nagel mich nicht drauf fest, aber ich meine Raspbians Visualisierung läuft mit GTK+2.
Wäre daher naheliegend, mit GTK zu arbeiten.
GtkFileChooserDialog
hmm - zugegeben, das erschlägt mich jetzt ziemlich.
Was muss ich jetzt alles machen für eine simple OpenFileDialog oder SaveFileDialog Abfrage in meinem simplen C++ Programm?
Eine kurze Schritt-für-Schritt-Anleitung wäre nicht schlecht, um das Programm innerhalb 10-15 Minuten schreiben und starten zu können...
Bei mir läuft die Standard-GUI von Jessie, an Grafik habe ich openVG installiert.
Zum Einstieg:
Hello World GTK+ Raspbian
Hier ist dazu ein Tutorial
https://wiki.qt.io/Qt_for_Beginners#Our_first_window
aha, jetzt sehe ich klarer - das hat seine eigene IDE, und man muss zwangsweise dann sein ganzes Projekt darin schreiben.
Das wollte ich allerdings nicht.
Ich will weiter mit Geany programmieren, und nur die OpenFileDialog oder SaveFileDialog Komponenten einbinden, damit ich einfach per Auswahl-Menüs Datei/Verzeichnis-Zugriffe (öffnen, speichern) machen kann.
Und hier ist der Code
main.cpp
CMakeLists.txtCode:#include <QApplication> #include <QPushButton> #include <QWidget> #include <QFileDialog> #include <iostream> class Window : public QWidget { Q_OBJECT public: explicit Window(QWidget *parent = 0); private slots: void slotButtonClicked(); private: QPushButton *m_button; }; Window::Window(QWidget *parent) : QWidget(parent) { // Set size of the window setFixedSize(100, 50); // Create and position the button m_button = new QPushButton("Hello World", this); m_button->setGeometry(10, 10, 80, 30); connect(m_button, SIGNAL (clicked()), this, SLOT (slotButtonClicked())); } void Window::slotButtonClicked() { QString fname = QFileDialog::getOpenFileName( this, tr("Open File"), "/home", ""); std::cout << fname.toUtf8().constData() << std::endl; } #include "main.moc" int main(int argc, char **argv) { QApplication app (argc, argv); Window wnd; wnd.show(); return app.exec(); }
Code:cmake_minimum_required(VERSION 2.8.11) PROJECT(test C CXX) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) find_package(Qt5Widgets REQUIRED) include_directories(${Qt5Widgets_INCLUDE_DIRS}) SET(SRCS main.cpp ) SET(LIBS ${Qt5Widgets_LIBRARIES} ) # Executable ADD_EXECUTABLE(qt-test ${SRCS} ) # Linking TARGET_LINK_LIBRARIES(qt-test ${LIBS})
Dateisystem schaut so aus:
BauenCode:georg@xps:/tmp$ tree qttest/ qttest/ ├── CMakeLists.txt └── main.cpp 0 directories, 2 files
AUsführen:Code:georg@xps:/tmp$ cd qttest georg@xps:/tmp/qttest$ mkdir build georg@xps:/tmp/qttest$ cd build/ georg@xps:/tmp/qttest/build$ cmake .. -- The C compiler identification is GNU 5.3.1 -- The CXX compiler identification is GNU 5.3.1 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /tmp/qttest/build georg@xps:/tmp/qttest/build$ make Scanning dependencies of target qt-test_automoc [ 25%] Automatic moc for target qt-test Generating main.moc [ 25%] Built target qt-test_automoc Scanning dependencies of target qt-test [ 50%] Building CXX object CMakeFiles/qt-test.dir/main.cpp.o [ 75%] Building CXX object CMakeFiles/qt-test.dir/qt-test_automoc.cpp.o [100%] Linking CXX executable qt-test [100%] Built target qt-test georg@xps:/tmp/qttest/build$
- - - Aktualisiert - - -Code:georg@xps:/tmp/qttest/build$ ./qt-test
Du must auch nicht die IDE nutzen. Ich nutze Emacs und cmake. cmake weil diese makefiles leicht zu schreiben sind und die Makros die Libs und Includes leicht finden.
herzlichen Dank für deine Mühe!
cmake, make und makefile habe ich allerdings noch nie genutzt und weiß auch gar nicht, was die machen und wie die funktionieren.
Ich nutze nur die Geany Einstellungen für Compile und Build, die sehen dann bei mir so ähnlich wie hier aus:
Geany settings for compile:
g++ -Wall -pthread -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c "%f" -lshapes -lwiringPi -lrt
Geany settings for make/build:
g++ -Wall -pthread -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -o "%e" "%f" -lshapes -L/opt/vc/lib -lOpenVG -lEGL -lwiringPi -lrt
Lässt sich das für QTCode entsprechend ändern?
Das was du in deine geany Einstellungen gemacht hast ist praktisch schon ein kleines Makefile
Du kannst das auch mit geany machen. Machst dein Verzeichnis qttest. Erstellst build. "cmake ..". (was ich eben oben gemacht habe).
Für compile machst du dann
"make -C /tmp/qttest/build/"
clean
"make -C /tmp/qttest/build/ clean"
Wenn du das CmakeLists.txt änderst, wird das bei make automatisch aktualisiert (bsp. neues cpp file). Sehr praktisch!
Edit: Für cmake gibts auch ein Gui:
cmake-curses-gui - curses based user interface for CMake (ccmake)
cmake-qt-gui - Qt4 based user interface for CMake (cmake-gui)
curses (shell)
Qt-gui: Eben Gui
Edit2: Deine Libs machst du dann eben bei LIBS rein
-lrt
-lpthread
etc
Include directories .. siehe Oben ...
danke!
1 Sache habe ich wschl irgendwo verpasst:
was muss ich wie auf dem Pi installieren, damit QT läuft?
apt-get install
oder
git git-clone
oder wie immer man so was macht
(bin blutiger Linux-Anfänger)
Du brauchst:
sudo apt-get install cmake-qt-gui build-essential qt5-default
Das sollte alles sein.
(Denke Jessie brauchst du für Qt5. )
Lesezeichen