Функция должна открывать разные widget в зависемости что выбрал

190
09 октября 2018, 15:00

Что у меня есть:

в конструкторе:

  connect(openAction, SIGNAL(triggered()), this, SLOT(openCatClicked()));
connect(openAction, SIGNAL(triggered()), this, SLOT(openDogClicked()));

Моя функция

void Widget::openClicked()
{
  if( mTableModel->openComp(CAT) == true)
  {
      mCatWidget = new CatWidget();
      mCatWidget->show();
  }
  else  if (mTableModel->openComp(DOG) == false)
    {
       mDogWidget = new DogWidget();
       mDogWidget->show();
    }
}

В моделе у меня функция:

  bool TableModel::openComponent(Type type)
  {
    if(type  == CAT)
    {
       return true;
    }
    if(type == DOG)
    {
       return false;
    }
 }

Но у меня оба открываются виджета всегда. Нужна ваша помощь

UPD:

bool Model::openComp(Type type)
{
  switch (type)
  {
      case 0:
        return Cat;
      case 1:
        return DOG;
}
return false;
}

UPD2:

void Widget::openClicked()
{
  if( mTableModel->openComp(CAT) == true)
  {
     mCatWidget = new CatWidget();
     mCatWidget->show();
  }
  else  if (mTableModel->openComp(DOG) == false)
  {
     mDogWidget = new DogWidget();
     mDogWidget->show();
  }
}
Answer 1

Вы к одному action цепляете 2 слота:

connect(openAction, SIGNAL(triggered()), this, SLOT(openCatClicked()));
connect(openAction, SIGNAL(triggered()), this, SLOT(openDogClicked()));

Т.е. Вы на сигнал triggered одного openAction повесили и openCatClicked, и openDogClicked. Вот Вам оба диалога и показываются.

Answer 2

Вам наверное нужно делать так: (хотя ваши намерения не очень понятны):

bool Model::openComp(Type type)
{
   return type == CAT;
}
void Widget::openClicked(Type t)
{
  if( mTableModel->openComp(t) == true)
  {
     mCatWidget = new CatWidget();
     mCatWidget->show();
  }
  else  
  {
     mDogWidget = new DogWidget();
     mDogWidget->show();
  }
}

Может быть, что я неверно понимаю что вы пытаетесь делать...

READ ALSO
У меня ошибка с HIBERNATOом: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

У меня ошибка с HIBERNATOом: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Вот ссылка на англойязычную версиюНе могли бы Вы мне помочь, потому что советы на ссылочной версии не помогли: [https://stackoverflow

289
Как в sendkeys передать значение из файла properties?

Как в sendkeys передать значение из файла properties?

Подскажите пожалуйстаЕсть файл у меня settings

254
Кол-во точек в круге

Кол-во точек в круге

На вход принимается радиус(целое число)Нужно вычислить сколько точек входит в круг

185
Как проверить строку на наличие символа "? [закрыт]

Как проверить строку на наличие символа "? [закрыт]

Как проверить строку на наличие символа " ?

179