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

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

Страниц: 1 ... 15 16 [17] 18   Вниз
  Печать  
Автор Тема: Регулярное выражение с QString  (Прочитано 160983 раз)
Spark
Гость
« Ответ #240 : Август 17, 2013, 21:33 »

Запутался. Тут вроде и не нужно было прописывать connect. Вроде все по аналогии делал. Но ведь дело не в:
Compound.cc (доставка Item - работает) -> textory.cc.
Здесь все работает. Qlist перегоняется, так же хорошо как и в связке:
mainwindow.cc (доставка Item - работает) -> textory.cc.

Ведь проблема дальше в textory.cc  (сигнал-слот работает) -> textorywidget.cc. Здесь вроде я вообще ничего не должен был трогать и все работать должно было. Тем не менее, если слив списка был произведен из mainwindow.cc то все в порядке. Слот срабатывает.
Но если перелить тот список из Compound.cc. То этот слот уже не срабатывает.

Сигнал опубликован в textory.hh.
signals:
  void itemsChanged();

И он работает в textorywidget.cc:
Код
C++ (Qt)
 connect( m_textory, SIGNAL( itemsChanged() ),
          this, SLOT( updateTextoryCounts() ) );

textorywidget.hh:
Код
C++ (Qt)
private:
 Textory * m_textory;

Но только так как я описал выше.
« Последнее редактирование: Август 17, 2013, 21:36 от Spark » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #241 : Август 17, 2013, 22:01 »

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

пальцем в небо: раз коннект находится только в textorywidget, значит там скорее всего m_textory является указателем не на тот textory, который сидит в Compound. можно проверять что возвращает коннект (true/false).
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Spark
Гость
« Ответ #242 : Август 18, 2013, 05:59 »

Хорошо. Наверное действительно путанно пояснил.

Постараюсь пояснить проще.
Есть textory.cc  и в ней функция:
Код
C++ (Qt)
void Textory::addItem( Item const & item )
{
  list.prepend( item );
  emit itemsChanged();
}
Как видим, эта функция просто принимает пункты списка и формирует сам список. При получении очередного пункта списка отправляет сигнал.

Принимающий слот находится в textorywidget.cc:
Код
C++ (Qt)
 connect( m_textory, SIGNAL( itemsChanged() ),
          this, SLOT( updateTextoryCounts() ) );
И все. Эта схема работает.
Если список list гарантированно формируется в любом случае, то почему с сигналом траблы? Он срабатывает только тогда когда пункт списка пришел с mainwindow.cc.

Мои скромные познания не позволяют увидеть связь или проверить, что мешает отправить (или принять) сигнал, если пункт списка пришел с compound.cc. Как я понимаю, отправится сигнал должен был, но что то мешает принять его.
« Последнее редактирование: Август 18, 2013, 06:06 от Spark » Записан
Spark
Гость
« Ответ #243 : Август 18, 2013, 06:14 »

Или я могу заблуждаться по поводу того, что список формируется?
Просто qDebug показывает, что пункты списка приходят в любом случае:
Код
C++ (Qt)
void Textory::addItem( Item const & item )
{
  list.prepend( item );
  qDebug() << "adding item " << item.word;
  emit itemsChanged();
}
Может просто сам список не пополняется? И искать причины в другом месте?
Записан
Spark
Гость
« Ответ #244 : Август 18, 2013, 07:27 »

В textorywidget.cc проверяю коннек, надеюсь правильно понял как это делается.
Код
C++ (Qt)
 connect( m_textory, SIGNAL( itemsChanged() ), this, SLOT( updateTextoryCounts() ) );
 qDebug() << "CONNECT " << connect( m_textory, SIGNAL( itemsChanged() ), this, SLOT( updateTextoryCounts() ) );

В дебаге при запуске:
CONNECT  true

Вернее, наверное вопрос надо ставить так. Как правильно узнать, что возвращает connect каждый раз при отправке сигнала?
« Последнее редактирование: Август 18, 2013, 09:18 от Spark » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #245 : Август 18, 2013, 10:38 »

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

результат коннекта проверен правильно.

поставь брейкпоинт в методе updateTextoryCounts() чтобы убедиться, что туда программа действительно не заходит.
раз коннект находится только в textorywidget, значит там скорее всего m_textory является указателем не на тот textory, который сидит в Compound
а вот это проверял? делается с помощью вывода адреса памяти, в котором сидит объект: qDebug() << m_textory или qDebug() << &textory
В textorywidget.cc есть уже такой слот:

Цитата: cpp
void TextoryModel::textoryChanged()
{
  qDebug() << "Textory Changed!";

  reset();
}

И qDebug показывает, что до него все уже доходит если пункт был отправлен через mainwindow.cc.
а этот слот тут собственно при чем? коннект же сделан с updateTextoryCounts(). или он там вызывается из updateTextoryCounts()?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Spark
Гость
« Ответ #246 : Август 18, 2013, 12:26 »

а этот слот тут собственно при чем? коннект же сделан с updateTextoryCounts(). или он там вызывается из updateTextoryCounts()?
Да тут спутал (наэкспериментировал). Так правильно:
Код
C++ (Qt)
void TextoryModel::updateTextoryCounts()
{
 qDebug() << "Textory Changed!";
 reset();
}

Сейчас постараюсь перевести то, что вы мне посоветовали Улыбающийся.
поставь брейкпоинт в методе updateTextoryCounts() чтобы убедиться, что туда программа действительно не заходит.
Разве это не пойдет для проверки?:
Код
C++ (Qt)
void TextoryModel::updateTextoryCounts()
{
 qDebug() << "Textory Changed!";
 reset();
}
Textory Changed! высвечивается, только тогда пункты списка начинают лететь с maiwindow.cc.
Записан
Spark
Гость
« Ответ #247 : Август 18, 2013, 12:51 »

а вот это проверял? делается с помощью вывода адреса памяти, в котором сидит объект: qDebug() << m_textory или qDebug() << &textory
Как смог так понял Улыбающийся.
В общем в textorywidget.cc - M_Textory1  Textory(0x28f80c)
В mainwindow.cc - Textory2  Textory(0x28f80c)
В compound.cc Textory3 - Textory(0xb94b0b4)
Ну разницу вижу Улыбающийся. Спасибо, теперь хоть видно что копать. Но не ясно где Улыбающийся. Буду разбираться почему так?

P.S. Так по простому понял - как только циферки совпадут, так все сразу наладится Улыбающийся?
« Последнее редактирование: Август 18, 2013, 12:55 от Spark » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #248 : Август 18, 2013, 13:12 »

P.S. Так по простому понял - как только циферки совпадут, так все сразу наладится Улыбающийся?
да. где-то в mainwindow передается объект Textory (или указатель на него) в textorywidget, который сохраняется в последнем. тебе надо сделать то же самое в compound.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Spark
Гость
« Ответ #249 : Август 18, 2013, 13:46 »

P.S. Так по простому понял - как только циферки совпадут, так все сразу наладится Улыбающийся?
да. где-то в mainwindow передается объект Textory (или указатель на него) в textorywidget, который сохраняется в последнем. тебе надо сделать то же самое в compound.
Спасибо с вашей помощью победил.
Однако нагородил чувствую огород Улыбающийся. Поскольку, фактически шел на поводу у компилятора. Что он просил, то и делал. В общем это касается переменных, которые надо объявить. Если компилятор ругается на их отсутствие, то объявляю и прописываю где просят Улыбающийся. Как то так на ощупь в данном случае. Это немного гнетет. Поскольку, скорее всего можно было как то оптимально сработать. Не то, что не понимаю, что делаю, а просто некоторые вещи кажутся лишними. Надеюсь сейчас буду переписывать на чисто и более осознанно смотреть, что лишнее.
Но главное работает. И заветный списочек выводится Улыбающийся. Подготовил его относительно быстро, а вот пару дней провозился на его вывод. Теперь приобрел еще небольшой навык и по диагностике.
Спасибо!
« Последнее редактирование: Август 18, 2013, 13:49 от Spark » Записан
Spark
Гость
« Ответ #250 : Август 18, 2013, 19:38 »

Пытаюсь с compound.cc отправить пункты списка прямо в mainwindow.cc минуя textory.cc.
Допустим, делать это через слот:
emit listStatCompound( compoundWordItem );
Если действовать по аналогии то с виду ничего сложного.
Однако, одна пугающая загвоздка. В mainwindow.cc требуется объявить:
m_compound( длинная цепочка переменных ),

Мало того, что мне надо то перетащить только пункты QStringlist. К тому же я не знаю, что именно объявлять в скобках, если мне это вообще не нужно, не объявлять же кучу ненужных переменных, что бы просто их вставить в эту цепочку. Как я собственно выкрутился в предыдущей задаче (благо там только одна переменная понадобилась и я ее воткнул с потолка, как мне кажется Улыбающийся).
Ну понимаю, что меня можно в чем поругать и на на этот раз и поделом Улыбающийся. Когда выполнял подобные задачи, создавая свои виджеты, то подобные вопросы были более проще, поскольку самостоятельно постепенно все прописывал и понимал, что делаю. Но в данном случае ковыряю не свой исходник, добавив свой функционал и все, что в нем прописано ранее, конечно, нужно. Но теперь требуется соединить поток с mainwindow.cc. И можно ли как то выкрутиться и на этот раз? Надеюсь ясна ситуация.

Или задача перелива списка решается как то проще?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #251 : Август 18, 2013, 20:53 »

в третий раз спрашиваю: какая взаимосвязь между твоими классами? что такое compound (виджет или просто класс с данными)? где и как он создается?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #252 : Август 18, 2013, 20:56 »

to kambala:
На сколько тебя ещё хватит, интереcно Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #253 : Август 18, 2013, 21:15 »

Блин, переливание из пустого в порожнее В замешательстве
Записан

Spark
Гость
« Ответ #254 : Август 18, 2013, 21:22 »

в третий раз спрашиваю: какая взаимосвязь между твоими классами? что такое compound (виджет или просто класс с данными)? где и как он создается?
Попробую ответить на вопрос так как я это понимаю.
Класс с данными. Создается в новом листинге. Вернее он был создан до меня. Добавил свой функционал и пытаюсь научиться обмениваться данными между классами в разных листингах.
Записан
Страниц: 1 ... 15 16 [17] 18   Вверх
  Печать  
 
Перейти в:  


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