Qt signal with an enum as a parameter

前端 未结 3 752
不思量自难忘°
不思量自难忘° 2021-01-22 02:02

I\'m trying to pass an enum as a value to a slot in my program, but I\'m having some problems. In my header file I\'ve created the enum:

Q_ENUMS(button_type);
e         


        
相关标签:
3条回答
  • 2021-01-22 02:50

    You're passing the SLOT() macro a value when it's expecting a type. More fundamentally this doesn't make much sense anyway as what you're struggling to achieve is to pass the slot a constant. Why not just use button_back in the slot function directly?

    You can define a slot which takes a button_type value, but then you'd need to connect it to a signal that passes one as a parameter.

    What are you actually trying to do?

    0 讨论(0)
  • 2021-01-22 03:07
    Object::connect: No such slot main_application::input_handler(button_back)
    

    Of course, there is, because signature is main_application::input_handler(button_type), and button_back is a value, not type. And even you make right signature, you will not be able to connect that signal and slot due to their signature mismatch.

    Also, you can always use QObject::sender() function to get known, what button was pressed.

    0 讨论(0)
  • 2021-01-22 03:09

    Signal and Slot need to have the same parameters. What you want is a QSignalMapper.

    edit: Here is an example from an application of mine. It creates 10 menu actions that each are connected to the same slot gotoHistoryPage but each called with a different int value.

    m_forwardMenu = new QMenu();
    for(int i = 1; i<=10; i++)
    {
        QAction* action = m_forwardMenu->addAction(QString("%1").arg(i));
        m_forwardActions.push_back(action);
        m_signalMapper->setMapping(action, i);
        connect(action, SIGNAL(triggered()), m_signalMapper, SLOT(map()));
    }
    ui.forwardButton->setMenu(m_forwardMenu);
    connect(m_signalMapper, SIGNAL(mapped(int)), this, SLOT(gotoHistoryPage(int)));
    
    0 讨论(0)
提交回复
热议问题