You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Air_Ground_CEC/src/main/mainwindow.cpp

282 lines
9.3 KiB

#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<QPushButton *>(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<<liner<<" "<<turn<<std::endl;
qnode.KeyboardMove(key, liner, turn);
}
void MainWindow::slot_rockKeyChange(int key){
//速度
float liner = ui->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));
}