Название: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 13:31 Добрый день,
Рассматриваю учебный код (крестики-нолики): Класс самой игры: Код: game::game(QWidget *parent) : Класс кнопок этой игры: Код: crossButton::crossButton(QWidget *parent) : Непонятно, какая связка connect-ов срабатывает раньше при нажатии на crossButton Код: connect(cb, SIGNAL(clicked()), this, SLOT(turn())) Код: connect(this, SIGNAL(clicked()), this, SLOT(setClickedState())) И еще вопрос - задавая статическую переменную в одном cpp, будет ли она доступна в другом cpp того же проекта? Название: Re: Очередность сигналов Отправлено: Bepec от Август 17, 2014, 13:49 Порядок коннектов и прихода сигналов не определён.
Если задать глобальную статическую - то видно будет. Если публичную статическую - то будет видно,если второй cpp будет иметь указатель на класс из первого cpp. Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 13:59 Порядок коннектов и прихода сигналов не определён. Как тогда контролировать сигналы или вообще никак? Код: Если задать глобальную статическую - то видно будет. 1)Глобальная статическая переменная - как она объявляется, подскажите пожалуйста? 2) Указатель на класс из первого cpp - то есть если я сделаю #include "первый_cpp.h"? Не совсем понимаю. Название: Re: Очередность сигналов Отправлено: Igors от Август 17, 2014, 14:17 Непонятно, какая связка connect-ов срабатывает раньше при нажатии на crossButton Та что коннектилась первой (в данном случае слот turn) - это легко проверить в отладчике.И еще вопрос - задавая статическую переменную в одном cpp, будет ли она доступна в другом cpp того же проекта? "Статическая" означает "только в этом cpp (местные). Напрfile1.cpp Код Если нужен доступ из др cpp, то это просто глобальная, напр file1.cpp Код file1.h Код file2.cpp Код
Название: Re: Очередность сигналов Отправлено: Bepec от Август 17, 2014, 14:29 Был неправ.
Цитировать If several slots are connected to one signal, the slots will be executed one after the other, in the order they have been connected, when the signal is emitted. В том порядке, в котором подсоединены.Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 15:06 Код: "Статическая" означает "только в этом cpp (местные). Напр Можете написать этот же код только в определении класса, а то я никак представить это не могу)) Т.е., как я понял, глобальной статическая переменная станет, если мы допишем к её описанию "extern" и вложим заголовочный файл класса с этой переменной в срр, в котором планируется доступ к ней?[/code] Название: Re: Очередность сигналов Отправлено: Igors от Август 17, 2014, 15:46 Можете написать этот же код только в определении класса, а то я никак представить это не могу)) Код
Т.е., как я понял, глобальной статическая переменная станет, если мы допишем к её описанию "extern" и вложим заголовочный файл класса с этой переменной в срр, в котором планируется доступ к ней? Не станет. По стандарту есть "локальные переменные" и "нелокальные" - все остальные, которые живут всегда (от начала до конца приложения). static ограничивает "область видимости". Написали static перед переменной (или объявили ее в безымянном namespace) - все, доступна только в этом файле. Объявили static член класса - значит видима из класса (обращаться просто mVar1) и тем кто видит класс (обращаться MyClass::mVar1)Пока с азами неважно Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 15:58 Спасибо Igors! :)
И еще вопрос: Цитировать ... и тем кто видит класс (обращаться MyClass::mVar1) Такое правило относится только к static членам класса? Название: Re: Очередность сигналов Отправлено: kambala от Август 17, 2014, 16:45 Цитировать Код
Цитировать ... и тем кто видит класс (обращаться MyClass::mVar1) Такое правило относится только к static членам класса?Название: Re: Очередность сигналов Отправлено: Igors от Август 17, 2014, 17:19 кем рекомендуется? я, например, о таком никогда не слышал. Я уже и не могу вспомнить где это почерпнул - так давно :) Во всяком случае попробовав разок - к "static" уже вряд ли вернетесь, анонимное namespace гораздо удобнее.Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 20:25 Вопрос не по теме - в каком разделе этого форума можно выложить легкий код для помощи в поиске ошибки?
Название: Re: Очередность сигналов Отправлено: kambala от Август 17, 2014, 20:54 вопросы новичков :)
Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 21:11 Хорошо :) Тут напишу тогда, чтобы темы не плодить :)
Писал учебный код по MVC и при запуске вышло системное сообщение о ошибке запуска, а в терминале вышла такая ошибка "ASSERT failure in QVector<T>::operator[]: "index out of range". У преподавателя все получилось вроде :)Ниже код. main.cpp Код: #include <QApplication> calendar.h Код: #ifndef CALENDAR_H calendar.cpp Код: #include "calendar.h" Название: Re: Очередность сигналов Отправлено: Bepec от Август 17, 2014, 21:28 Учиться учиться и ещё раз учиться :D
Это с++, тут управлять памятью нужно вручную. Ошибка - выход за границы вектора. При создании вектор пуст. И память не выделена, ибо он пуст :) Потому надо не Код: m_buttons[ i ] = bla bla Код: QPushButton * point = new QPushButton bla bla; Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 21:37 Учиться учиться и ещё раз учиться :D Это с++, тут управлять памятью нужно вручную. Ошибка - выход за границы вектора. При создании вектор пуст. И память не выделена, ибо он пуст :) Потому надо не Код: m_buttons[ i ] = bla bla Код: QPushButton * point = new QPushButton bla bla; Как же у него получилось тогда? ??? По поводу учиться я согласен - я в этом бизнесе всего два с лишним месяца(с нуля) и много не знаю ;D ;D ;D Название: Re: Очередность сигналов Отправлено: Bepec от Август 17, 2014, 22:35 Я думаю ваш преподаватель сначала создал кнопки и запихал их в вектор. А потом проехался по вектору, делая что надо.
Название: Re: Очередность сигналов Отправлено: makar182 от Август 17, 2014, 22:48 Я думаю ваш преподаватель сначала создал кнопки и запихал их в вектор. А потом проехался по вектору, делая что надо. Да вроде нет, хотя может неправильно понял :) Это я смотрел запись Qt лекций Nokia :) Название: Re: Очередность сигналов Отправлено: Bepec от Август 17, 2014, 23:02 Ещё как вариант он сразу выделил место под N элементов.
|