你的代码看起来基本上是正确的,只有几个小问题需要注意。
首先,在连接菜单项的信号和槽函数时,你使用了错误的信号名称。应该将&QAction::triggered
修改为&QAction::triggered
。
其次,在添加菜单项到菜单栏时,你忘记将具体的操作与每个菜单项关联起来。在创建QAction
对象时,可以使用setText()
方法设置显示文本,并通过调用setShortcut()
方法设置快捷键。
下面是修改后的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建界面
m_clientsWindow = new Clientswindow();
m_ESP32Window = new ESP32window();
// 初始化menu
QMenu* m_menuClients = menuBar()->addMenu("Clients");
QMenu* m_menuESP32s = menuBar()->addMenu("ESP32");
QAction* m_showClientsWindow = new QAction("Show Clients Window", this);
connect(m_showClientsWindow, &QAction::triggered, this, &MainWindow::s_menu_Clients);
QAction* m_showESP32sWindow = new QAction("Show ESP32 Window", this);
connect(m_showESP32sWindow, &QAction::triggered, this, &MainWindow::s_menu_ESP32s);
m_menuClients->addAction(m_showClientsWindow);
m_menuESP32s->addAction(m_showESP32sWindow);
// 下面这样也可以
// connect(m_menuClients, SIGNAL(triggered()), this, SLOT(s_menu_Clients())); // 点击Clients菜单,打开Clients界面
// connect(m_menuESP32s, SIGNAL(triggered()), this, SLOT(s_menu_ESP32s())); // 点击ESP32菜单,打开ESP32界面
ui->m_stackedWidget->insertWidget(0, m_clientsWindow);
ui->m_stackedWidget->insertWidget(1, m_ESP32Window);
ui->m_stackedWidget->setCurrentIndex(1);
ui->m_stackedWidget->show();
}
MainWindow::~MainWindow()
{
delete m_clientsWindow;
delete m_ESP32Window;
delete ui;
}
void MainWindow::s_menu_Clients()
{
ui->m_stackedWidget->setCurrentIndex(0);
ui->m_stackedWidget->show();
}
void MainWindow::s_menu_ESP32s()
{
ui->m_stackedWidget->setCurrentIndex(1);
ui->m_stackedWidget->show();
}
这样修改后,点击”Clients”菜单项将显示Clientswindow
窗口部件,点击”ESP32”菜单项将显示ESP32window
窗口部件。
希望这可以帮助到你!
内容由零声教学AI助手提供,问题来源于学员提问