Ну, ошибка происходит из-за передачи Menu
в качестве аргумента. Вы говорите, Menu
- это класс, а классы не являются выражениями сами по себе.
Если вам нужно вызвать test
для экземпляра Menu
, где Menu
не является производным от QObject
(т. Е. Нет доступных слотов), тогда вы можете просто создать слот в виджете, который содержит сам QMenu
(вероятно, QMainWindow
) и реализует вызов там!
Редактировать: добавить пример.
class MainWindow : public QMainWindow {
Q_OBJECT
// Usual declarations...
private slots:
void myCustomSlot();
};
Теперь скажите, что вы заполняете главное окно внутри его конструктора:
MainWindow::MainWindow(...) {
// Some initialization code
QMenu *menu2 = new QMenu("Test");
menu2->addAction("Test", this, SLOT(myCustomSlot));
// Some more initialization code
}
// ...
void MainWindow::myCustomSlot() {
instanceOfMenu->test();
}
Конечно, если вы создаете меню вне этого класса, вам нужно сделать этот слот общедоступным, но это еще одна проблема