je me suis amusé à tester sur mon RPi, c'est un peu comme le vélo, ça revient vite.
J'ai installé à la main les packages nécessaires à la compilation manuelle
sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
sudo apt-get install qt5-qmake qtbase5-dev
sudo apt-get install cmake
vous pouvez vérifier la version installée
qmake -v
ça me répond
QMake version 3.1
Using Qt version 5.15.8 in /usr/lib/arm-linux-gnueabihf
donc c'est bon.
Ensuite on peut essayer un petit code, on crée un répertoire pour le projet
mkdir qt_menu_example
on va dans ce répertoire
cd qt_menu_example
vous utilisez l'éditeur de texte que vous voulez et créer le fichier main.cpp qui contient le code suivant (on crée l'interface à la main)
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
void logAction1() {
qDebug() << "Action 1";
}
void logAction2() {
qDebug() << "Action 2";
}
void logAction3() {
qDebug() << "Action 3";
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow window;
// la menu bar
QMenuBar *menuBar = window.menuBar();
// le menu File avec l'action exit pour quitter le programme
QMenu *fileMenu = menuBar->addMenu("File");
QAction *exitAction = new QAction("Exit", &window);
fileMenu->addAction(exitAction);
QObject::connect(exitAction, &QAction::triggered, &app, &QApplication::quit);
// Le menu Edit (vide ici)
QMenu *editMenu = menuBar->addMenu("Edit");
// Le menu avec nos actions
QMenu *actionsMenu = menuBar->addMenu("Actions");
QAction *action1 = new QAction("Action 1", &window);
QAction *action2 = new QAction("Action 2", &window);
QAction *action3 = new QAction("Action 3", &window);
actionsMenu->addAction(action1);
actionsMenu->addAction(action2);
actionsMenu->addAction(action3);
// on attache les callbacks
QObject::connect(action1, &QAction::triggered, &logAction1);
QObject::connect(action2, &QAction::triggered, &logAction2);
QObject::connect(action3, &QAction::triggered, &logAction3);
window.setWindowTitle("Exemple Qt Pull-Down Menu");
window.resize(400, 300);
window.show();
return app.exec();
}
ensuite vous créez le fichier cmake qui sert à préparer la compilation CMakeLists.txt et qui contient
cmake_minimum_required(VERSION 3.5)
project(QtMenuExample)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(QtMenuExample main.cpp)
target_link_libraries(QtMenuExample Qt5::Widgets)
ensuite on crée un répertoire pour la coompilation
mkdir build
On va dans ce répertoire
cd build
On génère les fichiers de configuration nécessaires à la construction d'un projet ( exécuter la commande cmake dans le répertoire parent)
cmake ..
Après la génération des fichiers de construction, on peut passer à la phase de construction en utilisant l'outil de build correspondant à votre projet (par exemple, make, Visual Studio, etc.).
ici on va simplement utiliser make puisqu'on fait tout à la main
make
et une fois la compilation effectuée, si vous faites un ls vous verrez qu'il y a un binaire QtMenuExample prêt pour vous.
tapez ./QtMenuExample pour lancer votre application et vous avez une petite fenêtre qui s'ouvre avec votre menu

et si vous choisissez une de vos actions vous verrez dans le terminal que la callback est bien appelé.
Voilà. si maintenant vous voulez que votre application Qt utilise le port série, il faut utiliser QtSerialPort et régler la config pour correspondre à ce que fait votre arduino (8N1 à 115200 bauds par exemple)
PS:
Si vous avez un message de warning dans le terminal
qt.qpa.xcb: QXcbConnection: XCB error: 148 (Unknown), sequence: 191, resource id: 0, major code: 140 (Unknown), minor code: 20
c'est lié à la façon dont QT parle à X11 et on peut supprimer les warnings liés à XCB en faisant
export QT_LOGGING_RULES="qt.qpa.xcb=false"