【问题标题】:QT Signals and Slots, dynamic menubarQT Signals and Slots,动态菜单栏
【发布时间】:2021-12-14 18:18:37
【问题描述】:

我是 qt 新手,我想知道如何制作动态菜单。 我确实得到它来制作新的子菜单,但我不知道如何实现这些动态制作的子菜单的“triggered() 函数”,这样我就可以访问如果我想点击这样一个新的子菜单会发生什么。

这是我到目前为止所拥有的(带有:vector<QString> = vec; 和一些名为“New_Window”的 .ui 窗口) 在主窗口.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()));
        }

【问题讨论】:

  • 您能否明确说明您所说的“动态菜单”是什么意思?通过连接到QMenu::aboutToShow 信号,您可以在菜单显示之前收到通知。
  • 动态菜单是指在应用程序执行期间创建的菜单。
  • 动态菜单是指在开始时不存在但在应用程序执行期间创建的子菜单。我可以看到正在创建的菜单栏,这不是问题,但我不知道如何向按钮添加功能,例如如何使用这个新创建的菜单按钮打开一个新窗口。

标签: qt dynamic signals menubar slots


【解决方案1】:

这是一个带有动态接口的信号槽如何工作的示例, 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
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2014-08-17
    • 2012-07-25
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多