Russian Qt Forum
Ноябрь 26, 2024, 18:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с меню  (Прочитано 2172 раз)
BaTmAn
Гость
« : Май 18, 2010, 10:51 »

Я новичок. С QT только начал разбираться. Если можно обьясните как можно проще. Я не программист по образованию))
Значит есть 2 класса. Один производный от QMainWindow (СMainWindow). Другой от QWidget (СGraph). СGraph я делаю центральным виджетом  CMainWindow. Создаю меню главного окна и строку состояния.
Код:
.......
CMainWindow()//конструктор
{
   //устанавливаю центральный виджет
   pGraph = new CGraph;
   setCentralWidget(pGraph);

   //создаю меню
   QMenu *pBehaviorMenu = new QMenu("&Behavior");
   pBehaviorMenu->addAction("Select Area",this,SLOT(SelectObjectsMsg()),QKeySequence("A"));
   pBehaviorMenu->addAction("Move Objects",this,SLOT(MoveSelectedObjectsMsg()),QKeySequence("W"));
   menuBar()->addMenu(pBehaviorMenu);

   StatusBar = new QLabel(this);
   statusBar()->addPermanentWidget(StatusBar);//устанавливаем и настраиваем строку состояния
}

void MoveSelectedObjectsMsg()
{
   pGraph->SetBehavior(MOVE_SELECTED);//эта функция должна вызываться при выборе пункта меню "Select Area"
}
void SelectObjectsMsg()
{
   pGraph->SetBehavior(AREA_SELECT);//эта функция должна вызываться при выборе пункта меню "Move Objects"
}
............
private:
   CGraph* pGraph;
   QLabel *StatusBar;

Из меню главного окна я вызываю функции виджета pGraph, который работает со своими данными, результаты работы частично отображаются в строке состояния. У меня меню задаёт некий режим работы виджета pGraph. Нельзя ли сделать так чтобы при вызове соответсвующий команды меню в сигнале посылался параметр (например режима работы)? Я попробывал сделать как ниже но не получилось, слоты не реагируют на сигналы.
Код:
......
CMainWindow()
{
   pBehaviorMenu->addAction("Select Area",pGraph,SLOT(SelectObjectsMsg(1)),QKeySequence("A"));
   pBehaviorMenu->addAction("Move Objects",pGraph,SLOT(MoveSelectedObjectsMsg(2)),QKeySequence("W"));
}
......
class CGraph: public QWidget
{
..........
public slots:
    void SelectObjectsMsg(const char&)
    {
      .....
    }
    void MoveSelectedObjectsMsg(const char&)
    {
      .....
    }
}
Как мне сделать так, что бы при вызове соответсвующей команды меню, вызывалась нужная мне функция другого виджета, в которую бы передавался параметр в зависимости от выбранного пункта меню?
А то примером сверху мне приходилось дублировать функции.
Записан
crossly
Гость
« Ответ #1 : Май 18, 2010, 11:21 »

параметры слота должны соответствовать параметрам сигнала... но можно сделать один слот.... в котором в зависимости от экшина вызвавшего его вызывать функцию с нужным параметром... (звиняюсь за каламбур)... см Асистент на предмет sender()
Записан
Kolobok
Гость
« Ответ #2 : Май 18, 2010, 11:29 »

Почитай про QSignalMapper
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.152 секунд. Запросов: 21.