2013-07-16 3 views
0

Я довольно новичок в C++ и Qt. Я получил довольно далеко от моего текущего проекта, но я откладывал эту часть. У меня есть кнопка, которая открывает новое диалоговое окно:(Qt C++) Отправить значение int из диалога MainWindow?

void MainWindow::on_fillAll_clicked() 
{ 
    int yo; 
    BlockSelect bSelect; 
    bSelect.setModal(true); 
    bSelect.exec(); 

    if(bSelect.exec() == QDialog::Accepted) 
    { 
     //Get stuff here? 
     //I want to fill yo with the spinbox value 
     yo = bSelect.stuff(); 
     return; 
    } 

    qDebug() << yo; 
} 

Это прекрасно работает. В диалоговом окне у меня есть спин-бокс. Я хочу отправить это значение, введенное в поле со стрелкой, в мое главное окно, когда пользователь нажмет OK.

Я пытался получить «int yo;» чтобы иметь это значение из спинбокса, но все, что я пытаюсь, просто вызывает ошибку.

Я добавил это к моему BlockSelect общественного класса:

int stuff(); 

И я сделал эту функцию в моей blockselect.cpp:

int BlockSelect::stuff() 
{ 
    qDebug() << "The function was called"; 
    return ui->yolo->value(); 
} 

Но QDebug никогда не показывает ничего ???

Так как я могу заполнить yo из главного окна yolo из диалога?

Извините, если я не объяснить это хорошо :(Я все еще учусь. Спасибо за ваше время :)

ответ

1

Прежде всего, нет необходимости вызывать Exec() дважды, просто использовать его один раз внутри оператора if.

Чтобы ответить на ваш вопрос, у вас все еще есть объект диалога bSelect (и я предполагаю, что BlockSelect - это класс, который вы определяете?), Поэтому создайте внутри него функцию доступа, чтобы получить нужные значения.

if(bSelect.exec() == QDialog::Accepted) 
{ 
    //Get stuff here? 
    //I want to fill yo with the spinbox value 
    yo = bSelect.stuff(); 
    return; 
} 

EDIT:

Ваш класс BlockSelect должен содержать функцию доступа, это означает, что функция, которая возвращает значение.

int stuff() { return ui->yolo->value();} 

Что я делаю здесь извлечения ценности со счётчиком (при условии, что называется «Yolo») и возвращает его в результате вызова функции «вещей».

+0

Oh! Спасибо, что рассказала мне об этом. :) Я создал это в своем блочном виде.cpp (диалог cpp) void BlockSelect :: stuff() { int yolo (5); } – mrg95

+0

Я попытался поместить yo = bSelect.stuff (yolo) в мой оператор if, но он не работал – mrg95

+0

Я добавил то, что я сделал, к моему классу BlockSelect и blockselect.cpp к своему оригинальному сообщению. Я просто не понимаю, что добавить в оператор if, чтобы получить значение spinbox. – mrg95