QT QButtonGroup 与 QStackedWidget 实现菜单(Tab)切换

博客主要展示了与Qt相关的代码,但未给出具体代码内容。

代码:

{
   
   
	auto btn1 = new QPushButton("btn0");
    auto btn2 = new QPushButton("btn1");
    auto btn3 = new QPushButton("btn2");

    auto vlayBtn = new QVBoxLayout;
    vlayBtn->
#include "workplate.h" #include <QtWidgets> #include "ui/tabMain.h" #include "ui/tabSetting.h" #include "device/monitor.h" #include "thread/threadHmiRecv.h" #include "global/global.h" const char sMonitorMenu[HMI_MENU_SIZE][16] = { "主\n界\n面", "设\n置", "历\n史\n信\n息", }; #pragma execution_character_set("utf-8") workplate::workplate(QWidget* parent) : QDialog(parent) { if (nullptr == g_Monitor) { g_Monitor = new Monitor(this); } if (nullptr == g_ThreadHmiRecv) { g_ThreadHmiRecv = new ThreadHmiRecv(this); g_ThreadHmiRecv->start(); } //窗口设置 this->setFixedSize(UI_WINDOW_W, UI_WINDOW_H); this->setWindowTitle(QString::fromLocal8Bit(gSystemTitleName)); this->setWindowIcon(QIcon(QPixmap(":/skin/icon/logo.png"))); mainBKG = new QWidget(this); mainBKG->setProperty("UIClass", "LinearBlack"); mainBKG->setGeometry(0, 0, UI_WINDOW_W, UI_WINDOW_H); //菜单区域设置 int ix = UI_TAB_W + UI_SPACE_W; int iy = UI_MARGIN_H; iy += UI_LINE_H + UI_SPACE_H; menuBKG = new QWidget(mainBKG); menuBKG->setProperty("UIClass", "LinearBlack"); menuBKG->setGeometry(ix, iy, UI_BTN_H + 2 * UI_MARGIN_W, UI_WINDOW_H - iy); //设置按钮组(互斥按钮) QButtonGroup* group = new QButtonGroup(this); group->setExclusive(true); //按钮互斥 //菜单按钮布局 ix = UI_MARGIN_W; iy = UI_MARGIN_H; QPushButton* btn = nullptr; for (int i = 0; i < HMI_MENU_SIZE; ++i) { btn = new QPushButton(QString::fromLocal8Bit(sMonitorMenu[i]), menuBKG); btn->setCheckable(true); btn->setGeometry(ix, iy, UI_BTN_H, UI_BTN_W); iy += UI_BTN_W + UI_SPACE_H; btn->setProperty("UIClass", "CheckPurple"); connect(btn, SIGNAL(clicked()), this, SLOT(slot_SwitchTab())); group->addButton(btn); m_vBtnSwitch.push_back(btn); } //创建标签页 QWidget* tab = nullptr; /* 1.主界面 */ tab = new TabMain(mainBKG); m_vTables.push_back(tab); /* 设置 */ tab = new TabSetting(mainBKG); m_vTables.push_back(tab); /* 历史信息 */ tab = new QWidget(mainBKG); m_vTables.push_back(tab); //设置所有标签页的位置和尺寸 for (int i = 0; i < m_vTables.size(); ++i) { m_vTables[i]->setGeometry(0, 0, UI_TAB_W, UI_TAB_H); } //初始化主选中界面 m_vBtnSwitch[HMI_MAIN]->setChecked(true); showTable(HMI_MAIN); } //析构函数 workplate::~workplate() { if (nullptr != g_ThreadHmiRecv) { g_ThreadHmiRecv->setRun(false); //停止标志 } } bool workplate::nativeEvent(const QByteArray& eventType, void* message, long* result) { MSG* msg = reinterpret_cast<MSG*>(message); switch (msg->message) { default: break; } return QDialog::nativeEvent(eventType, message, result); } //键盘事件处理 void workplate::keyPressEvent(QKeyEvent* e) { switch (e->key()) { case Qt::Key_0: { g_Monitor->SendMsg((uint8_t*)"12345678", 8); } default: break; } } void workplate::closeEvent(QCloseEvent* e) { } //标签页切换槽函数 void workplate::slot_SwitchTab() { const QPushButton* const btn = qobject_cast<QPushButton*>(sender()); if (btn == m_vBtnSwitch[HMI_MAIN]) { showTable(HMI_MAIN); } else if (btn == m_vBtnSwitch[HMI_SETTING]) { showTable(HMI_SETTING); } else if (btn == m_vBtnSwitch[HMI_HISTORY]) { showTable(HMI_HISTORY); } } //显示指定标签页函数 void workplate::showTable(const uint8_t tab) { for (int i = 0; i < HMI_MENU_SIZE; ++i) { if (tab == i) { m_vTables[i]->setVisible(true); //显示目标标签页 } else { m_vTables[i]->setVisible(false); //隐藏其他标签页 } } } 详细分析这段代码
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值