#include "../ui/mainwindow.hpp" MainWindow::MainWindow(int argc, char **argv, QWidget *parent) : QMainWindow(parent), qnode(argc, argv), ui(new Ui::MainWindow) { qnode.init(); ui->setupUi(this); initUis(); connections(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initUis(){ setBtnStyles(); /* * init */ rock_widget = new JoyStick(ui->JoyStick_widget); rock_widget->show(); } void MainWindow::setBtnStyles(){ /* * set PushButton state */ ui->btn_main->setIcon(QIcon("://images/up.png")); ui->btn_main->setText("mainWidget"); ui->btn_main->setStyleSheet( "QPushButton:hover{" "background-color:rgb(186, 189, 182);" "border-bottom:2px solid rgb(67, 154, 246);}" "QPushButton:checked{" "background-color:cyan;" "border-bottom:2px solid white}" "QPushButton:pressed{" "background-color:rgb(67, 154, 246)}" "QPushButton{" "background-color:rgb(238, 238, 236);" "border:none;" "padding:0px 0px 0px 0px;" "margin:0px 0px 0px 0px;}"); ui->btn_uav->setStyleSheet( "QPushButton:hover{" "background-color:rgb(186, 189, 182);" "border-bottom:2px solid rgb(67, 154, 246);}" "QPushButton:checked{" "background-color:cyan;" "border-bottom:2px solid white}" "QPushButton:pressed{" "background-color:rgb(67, 154, 246)}" "QPushButton{" "background-color:rgb(238, 238, 236);" "border:none;" "padding:0px 0px 0px 0px;" "margin:0px 0px 0px 0px;}"); ui->btn_ugv->setStyleSheet( "QPushButton:hover{" "background-color:rgb(186, 189, 182);" "border-bottom:2px solid rgb(67, 154, 246);}" "QPushButton:checked{" "background-color:cyan;" "border-bottom:2px solid white}" "QPushButton:pressed{" "background-color:rgb(67, 154, 246)}" "QPushButton{" "background-color:rgb(238, 238, 236);" "border:none;" "padding:0px 0px 0px 0px;" "margin:0px 0px 0px 0px;}"); // 8 -> Forward: ↑ ui->pushButton_Forward->setShortcut(Qt::Key_8); ui->pushButton_Forward->setStyleSheet( "QPushButton{border-image: url(://images/up.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/up_2.png)}"); ui->pushButton_Forward->setFlat(true); // 2 -> Back: ↓ ui->pushButton_Back->setShortcut(Qt::Key_2); ui->pushButton_Back->setStyleSheet( "QPushButton{border-image: url(://images/down.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/down_2.png)}"); ui->pushButton_Back->setFlat(true); // 4 -> Left: ← ui->pushButton_Left->setShortcut(Qt::Key_4); ui->pushButton_Left->setStyleSheet( "QPushButton{border-image: url(://images/left.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/left_2.png)}"); ui->pushButton_Left->setFlat(true); // 6 -> Right: → ui->pushButton_Right->setShortcut(Qt::Key_6); ui->pushButton_Right->setStyleSheet( "QPushButton{border-image: url(://images/right.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/right_2.png)}"); ui->pushButton_Right->setFlat(true); // 7 -> Left_Forward: ↖ ui->pushButton_Left_Forward->setShortcut(Qt::Key_7); ui->pushButton_Left_Forward->setStyleSheet( "QPushButton{border-image: url(://images/up_left.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/up_left_2.png)}"); ui->pushButton_Left_Forward->setFlat(true); // 9 -> Right_Forward: ↗ ui->pushButton_Right_Forward->setShortcut(Qt::Key_9); ui->pushButton_Right_Forward->setStyleSheet( "QPushButton{border-image: url(://images/up_right.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/up_right_2.png)}"); ui->pushButton_Right_Forward->setFlat(true); // 1 -> Left_Back: ↙ ui->pushButton_Left_Back->setShortcut(Qt::Key_1); ui->pushButton_Left_Back->setStyleSheet( "QPushButton{border-image: url(://images/down_left.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/down_left_2.png)}"); ui->pushButton_Left_Back->setFlat(true); // 3 -> Right_Back: ↘ ui->pushButton_Right_Back->setShortcut(Qt::Key_3); ui->pushButton_Right_Back->setStyleSheet( "QPushButton{border-image: url(://images/down_right.png)}" "QPushButton{border:none}" "QPushButton:pressed{border-image: url(://images/down_right_2.png)}"); ui->pushButton_Right_Back->setFlat(true); } void MainWindow::slot_keyboard_control(){ QPushButton *btn = qobject_cast(sender()); std::string btn_name = btn->text().toStdString(); char key = ' '; if (btn_name == "↙") key = '1'; else if (btn_name == "↓") key = '2'; else if (btn_name == "↘") key = '3'; else if (btn_name == "←") key = '4'; //else if (btn_name == "") // key = '5'; else if (btn_name == "→") key = '6'; else if (btn_name == "↖") key = '7'; else if (btn_name == "↑") key = '8'; else if (btn_name == "↗") key = '9'; //速度 float liner = ui->horizontalSlider_linear->value() * 0.01; float turn = ui->horizontalSlider_raw->value() * 0.01; //bool is_rage_mode = ui->checkBox_rage_mode->isChecked(); //std::cout<horizontalSlider_linear->value() * 0.01; float turn = ui->horizontalSlider_raw->value() * 0.01; switch (key) { case upleft: qnode.KeyboardMove('7', liner, turn); break; case up: qnode.KeyboardMove('8', liner, turn); break; case upright: qnode.KeyboardMove('9', liner, turn); break; case left: qnode.KeyboardMove('4', liner, turn); break; case right: qnode.KeyboardMove('6', liner, turn); break; case downleft: qnode.KeyboardMove('1', liner, turn); break; case down: qnode.KeyboardMove('2', liner, turn); break; case downright: qnode.KeyboardMove('3', liner, turn); break; } } void MainWindow::connections(){ QObject::connect(ui->btn_main, &QPushButton::clicked, this, [=](){ ui->stackedWidget_main->setCurrentIndex(0); }); QObject::connect(ui->btn_uav, &QPushButton::clicked, this, [=](){ ui->stackedWidget_main->setCurrentIndex(1); }); QObject::connect(ui->btn_ugv, &QPushButton::clicked, this, [=](){ ui->stackedWidget_main->setCurrentIndex(2); }); QObject::connect(ui->btn_system, &QPushButton::clicked, this, [=](){ ui->stackedWidget_ros_control->setCurrentIndex(1); }); QObject::connect(ui->btn_keyboard, &QPushButton::clicked, this, [=](){ ui->stackedWidget_ros_control->setCurrentIndex(0); }); /* * 绑定速度控制按钮 */ // 8 -> Forward: ↑ connect(ui->pushButton_Forward, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 2 -> Back: ↓ connect(ui->pushButton_Back, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 4 -> Left: ← connect(ui->pushButton_Left, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 6 -> Right: → connect(ui->pushButton_Right, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 7 -> Left_Forward: ↖ connect(ui->pushButton_Left_Forward, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 9 -> Right_Forward: ↗ connect(ui->pushButton_Right_Forward, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 1 -> Left_Back: ↙ connect(ui->pushButton_Left_Back, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); // 3 -> Right_Back: ↘ connect(ui->pushButton_Right_Back, SIGNAL(clicked()), this, SLOT(slot_keyboard_control())); connect(rock_widget, SIGNAL(keyNumchanged(int)), this, SLOT(slot_rockKeyChange(int))); //绑定slider的函数 connect(ui->horizontalSlider_raw, SIGNAL(valueChanged(int)), this, SLOT(Slider_raw_valueChanged(int))); connect(ui->horizontalSlider_linear, SIGNAL(valueChanged(int)), this, SLOT(Slider_linear_valueChanged(int))); } //滑动条处理槽函数 void MainWindow::Slider_raw_valueChanged(int v) { ui->label_raw->setText(QString::number(v)); } //滑动条处理槽函数 void MainWindow::Slider_linear_valueChanged(int v) { ui->label_linear->setText(QString::number(v)); }