QtMenubar Call Slot - PullRequest
       26

QtMenubar Call Slot

0 голосов
/ 30 декабря 2011

Это внутри класса Menu.Проблема заключается в addAction.Это работает, но нет соединения со слотом:

QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test");

Когда я делаю это:

QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test", Menu, test);

Я получаю ошибку компилятора: "ошибка: ожидаемое первичное выражение перед ','token "

Я имею в виду вызов функции test() в классе Menu.Что я делаю не так?

1 Ответ

2 голосов
/ 30 декабря 2011

Ну, ошибка происходит из-за передачи 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();
}

Конечно, если вы создаете меню вне этого класса, вам нужно сделать этот слот общедоступным, но это еще одна проблема

...