Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Последовательный вызов слотов.

Автор: Andrewshkovskii 25.9.2009, 20:22

Ситуация такая : я сейчас отлаживаю приложения, и после каждого вызова своего метода(слота)/сигнала вывожу информацию кто его вызвал.
Примерно вот так

View::setDisableReadDataButton method called
View::setEnabledViewCountSpinBox method called
View::setEnabledViewColumnSpinBox method called
View::setViewCount method called
View::setViewCount method called
View::setViewContColumns method called
View::setViewContColumns method called
View::distanceMatrixModelSet signal emited
View::setDistanceMatrixModel method called
Model::distanceMatrixModelReady(QStandardItemModel*) signal emited
View::dataMatrixModelSet signal emited
View::setDataMatrixModel method called
Model::dataMatrixModelRead(QStandardItemModel*) signal emited
Model::setUpDataMatrixModel method called
Model::dataReaded() signal emited
View::setViewCount method called
View::distanceMatrixModelSet(int) signal emited
View::updateDistanceMatrixModel method called
Model::distanceMatrixCalculated(QStadardItemModel*) signal emited
Model::calculateNewDistanceMatrixModel method called
View::setParameterSwitcherBar method called
Model::dataReaded(QStringList*) signal emited
Model::readData method called


Выводиться оно стеком..да правда каким-то не понятным, по логике вещей кое-что не совпадает с порядком вызова.
И вопрос такой : если я к одному слоту привязываю несколько сигналов, можно ли добиться того, что бы они вызывались в порядке подключения через QObject::connect()?
Если надо, вот исходник контроллера, который все это дело соединяет :

=cpp
connect(model,SIGNAL(dataReaded(QStringList*)),view,SLOT(setParameterSwitcherBar(QStringList*)));
connect(view->readDataButton,SIGNAL(clicked()),model,SLOT(readData()));
connect(model,SIGNAL(dataReaded()),view,SLOT(setEnabledViewCountSpinBox()));
connect(model,SIGNAL(dataReaded()),view,SLOT(setEnabledViewColumnSpinBox()));
connect(view,SIGNAL(distanceMatrixModelSet(int)),view,SLOT(setViewCount(int)));
connect(view->viewCountColumsSpinBox,SIGNAL(valueChanged(int)),view,SLOT(setViewCountColumns(int)));

connect(model,SIGNAL(dataReaded()),model,SLOT(setUpDataMatrixModel()));
connect(model,SIGNAL(dataMatrixModelReady(QStandardItemModel*)),
        view,SLOT(setDataMatrixModel(QStandardItemModel*)));

connect(view,SIGNAL(dataMatrixModelSet()),model,SLOT(setUpDistanceMatrixModel()));
connect(model,SIGNAL(distanceMatrixModelReady(QStandardItemModel*)),
            view,SLOT(setDistanceMatrixModel(QStandardItemModel*)));
connect(view->parametersSwithcerBar,SIGNAL(currentChanged(int)),model,SLOT(calculateNewDistanceMatrixModel(int)));
connect(model,SIGNAL(distanceMatrixCalculated(QStandardItemModel*)),view,SLOT(updateDistanceMatrixModel(QStandardItemModel*)));

Автор: ViGOur 25.9.2009, 21:13

Уже кто-то завадал подобный вопрос, и если мне не изменяет память, то пришли к тому, что если к одному слот привязано несколько сигналов, то порядок вызова не определен.

Автор: SABROG 25.9.2009, 21:46

Ты об этом? http://www.forum.crossplatform.ru/index.php?showtopic=981&view=findpost&p=19452

Автор: Litkevich Yuriy 26.9.2009, 4:05

Цитата(Andrewshkovskii @ 26.9.2009, 0:22) *
И вопрос такой : если я к одному слоту привязываю несколько сигналов, можно ли добиться того, что бы они вызывались в порядке подключения через QObject::connect()?
Об обратной ситуации явно сказанао в документации:
Цитата
Если несколько слотов связаны с одним сигналом, то при испускании сигнала они будут выполнены один за другим в произвольном порядке.
И в твоём случае скорее всего также.

Автор: kwisp 27.9.2009, 21:52

Цитата(Andrewshkovskii @ 25.9.2009, 21:22) *
И вопрос такой : если я к одному слоту привязываю несколько сигналов, можно ли добиться того, что бы они вызывались в порядке подключения через QObject::connect()?

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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)