QT 信号和槽,动态菜单栏
QT Signals and Slots, dynamic menubar
我是qt新手,想知道如何制作动态菜单。
我确实得到它来制作新的子菜单,但我不知道如何实现这些动态制作的子菜单的“触发()函数”,以便我可以访问如果我想点击这样一个新的子菜单会发生什么。
这是我目前所拥有的(包括:vector<QString> = vec;
和一些名为“New_Window”的 .ui Window
在 mainwindow.cpp
在某些功能中:
QMenu *menu = this->menuBar()->addMenu("Chat Members");
for (int i = 0; i < vec.size(); ++i){
QString name = vec.at(i);
QAction *act = menu->addAction(name);
New_Window* new_window = new New_Window;
QObject::connect(act,SIGNAL(triggered()),
new_window,SLOT(actionReaction()));
}
这里是一个带有动态接口的信号槽如何工作的例子,
class A
是在程序启动后创建的,然后用户从class A
中点击了一个按钮,比如多次创建了一个class A
,我们需要判断从什么对象中得到一个signal
按下按钮,所以
class A : public QMainWindow
{
Q_OBJECT
public:
A(QWidget *parent = nullptr);
~A();
void setID(const int id);
void getId() const;
signals:
void onButtonPress(int ID);
private:
int mID;
};
这里我们创建一个新的class A
并存储在vector
中,
QVector<A*> mCreatingClassA;
void createNewClassA
{
QVector<A*> mCreatingClassA;
....
A* a = new A();
int id = // create your unique ID
a->setId(id);
connect(a,SIGNAL(onButtonPress(int)),this,SLOT(onyourSlot(int)));
mCreatingClassA.push_back(a);
....
}
检测从中接收到 signal
的对象)
void onyourSlot(int ID)
{
for (int i = 0; i < mCreatingClassA.size(); ++i) {
if(mCreatingClassA[i]->getId()==ID)
{
mCreatingClassA[i] // received a signal from this object
}
}
}
我是qt新手,想知道如何制作动态菜单。 我确实得到它来制作新的子菜单,但我不知道如何实现这些动态制作的子菜单的“触发()函数”,以便我可以访问如果我想点击这样一个新的子菜单会发生什么。
这是我目前所拥有的(包括:vector<QString> = vec;
和一些名为“New_Window”的 .ui Window
在 mainwindow.cpp
在某些功能中:
QMenu *menu = this->menuBar()->addMenu("Chat Members");
for (int i = 0; i < vec.size(); ++i){
QString name = vec.at(i);
QAction *act = menu->addAction(name);
New_Window* new_window = new New_Window;
QObject::connect(act,SIGNAL(triggered()),
new_window,SLOT(actionReaction()));
}
这里是一个带有动态接口的信号槽如何工作的例子,
class A
是在程序启动后创建的,然后用户从class A
中点击了一个按钮,比如多次创建了一个class A
,我们需要判断从什么对象中得到一个signal
按下按钮,所以
class A : public QMainWindow
{
Q_OBJECT
public:
A(QWidget *parent = nullptr);
~A();
void setID(const int id);
void getId() const;
signals:
void onButtonPress(int ID);
private:
int mID;
};
这里我们创建一个新的class A
并存储在vector
中,
QVector<A*> mCreatingClassA;
void createNewClassA
{
QVector<A*> mCreatingClassA;
....
A* a = new A();
int id = // create your unique ID
a->setId(id);
connect(a,SIGNAL(onButtonPress(int)),this,SLOT(onyourSlot(int)));
mCreatingClassA.push_back(a);
....
}
检测从中接收到 signal
的对象)
void onyourSlot(int ID)
{
for (int i = 0; i < mCreatingClassA.size(); ++i) {
if(mCreatingClassA[i]->getId()==ID)
{
mCreatingClassA[i] // received a signal from this object
}
}
}