iam trying to control an action on C++ of a QMenu in QT Creator. i have a window that has a label posting the action the user clicks from a menu to text but i want to control each sub menu seperately (the action of its).
Different function for "OPEN", different function for "QUIT" etc.
Any ideas?
MainWindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setFixedSize(500,300);
setWindowTitle("Menu Demo");
mainWidget=new QWidget;
setCentralWidget(mainWidget);
mainWidget->setFixedSize(this->width(),this->height());
mainLayout=new QVBoxLayout;
mainWidget->setLayout(mainLayout);
mainLabel=new QLabel;
mainLayout->addWidget(mainLabel);
fileMenu= new QMenu("FILE");
**fileMenu->addAction("SAVE"); //ACTIONS......different function.
**fileMenu->addAction("SAVE AS");**
**fileMenu->addAction("QUIT");****
editMenu= new QMenu("EDIT");
**editMenu->addAction("COPY");**
**editMenu->addAction("CUT");**
**editMenu->addAction("PASTE");**
menuBar()->addMenu(fileMenu);
menuBar()->addMenu(editMenu);
connect(fileMenu,SIGNAL(triggered(QAction*)),this,SLOT(menuSlot(QAction*)));
connect(editMenu,SIGNAL(triggered(QAction*)),this,SLOT(menuSlot(QAction*)));
}
void MainWindow::menuSlot(QAction *action)
{
mainLabel->setText("ACTION: "+action->text());
}
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
# include <QVBoxLayout>
# include <QHBoxLayout>
# include <QLabel>
# include <QMenu>
# include <QMenuBar>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
private:
QWidget *mainWidget;
QVBoxLayout *mainLayout;
QLabel *mainLabel;
QMenuBar *menubar;
QMenu *fileMenu;
QMenu *editMenu;
public slots:
void menuSlot(QAction *action);
};
#endif // MAINWINDOW_H
答案 0 :(得分:0)
只需在action->text()
中测试MainWindow::menuSlot
并执行请求的操作......
void MainWindow::menuSlot (QAction *action)
{
mainLabel->setText("ACTION: "+action->text());
if (action->text() == "SAVE") {
/*
* Do whatever is required for `SAVE'.
*/
} else if (action->text() == "SAVE AS") {
/*
* Do whatever is required for `SAVE AS'.
*/
}
}
您只需确保与每个QAction
相关联的文字是唯一的。
或者,您可以为每个操作添加一个插槽...
fileMenu= new QMenu("FILE");
auto *a = fileMenu->addAction("SAVE");
connect(a, SIGNAL(triggered(QAction *)), this, SLOT(save_slot(QAction *)));
a = fileMenu->addAction("SAVE AS");
connect(a, SIGNAL(triggered(QAction *)), this, SLOT(save_as_slot(QAction *)));
a = fileMenu->addAction("QUIT");
connect(a, SIGNAL(triggered(QAction *)), this, SLOT(quit_slot(QAction *)));
作为旁注,如果你使用Qt5,你应该更喜欢新的connect syntax信号和插槽。