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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Синхронизация двух таблиц  (Прочитано 6090 раз)
Evgeniya
Гость
« : Июль 21, 2009, 07:49 »

Всем здраствуйте!!!
У меня есть одна формочка с таблицей и при двойном щелчке по строчке таблицы выскакивает другая формочка с таблицей, с данными соответствующими этой строчке...И вот я хочу, чтобы при двйном щелчке первый раз выскакивала эта вторая форма и в последующем,чтобы двойной щелчок больше не обрабатывался и при одинарном щелчке менялись просто данные в таблице на второй форме...И вот вопрос, как же сделать, чтобы на двойной щелчок таблица реагировала только один раз, а все дальнейшее время толко на одинарный и этот первый раз она бы не реагировала на одинарный???просто у меня такое ощущение, что при двойном щелчке срабатывают оба слота(для двойного и одинарного щелчка)
Записан
Karl-Philipp
Гость
« Ответ #1 : Июль 21, 2009, 07:55 »

попробуй использовать disconnect (для разъединения сингала и слота) в теле слота, который вызывается.

Цитировать
bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method )   [static]

Disconnects signal in object sender from method in object receiver. Returns true if the connection is successfully broken; otherwise returns false.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Июль 21, 2009, 08:00 »

просто у меня такое ощущение, что при двойном щелчке срабатывают оба слота(для двойного и одинарного щелчка)

вот неправильное у тебя ощущение, должен срабатывать один слот, который обрабатывает двойной щелчок, если все правильно реализовано.
Записан
Evgeniya
Гость
« Ответ #3 : Июль 21, 2009, 08:35 »

попробуй использовать disconnect (для разъединения сингала и слота) в теле слота, который вызывается.
Цитировать
bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method )   [static]
Disconnects signal in object sender from method in object receiver. Returns true if the connection is successfully broken; otherwise returns false.
Спасибочки!!!Все получилось!!!!Только вот, если закроется эта формочка и придется заново ее создать двойным щелчком...тогда таблица уже не среагирует на него ((((

вот неправильное у тебя ощущение, должен срабатывать один слот, который обрабатывает двойной щелчок, если все правильно реализовано.
А что может быть не правильно реализовано??
В конструкторе два разных сгнала подключаются к двум разным слотам
connect(ui.tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(lpu()));
connect(ui.tableView,SIGNAL(clicked(QModelIndex)),this,SLOT(izm()));
Записан
Karl-Philipp
Гость
« Ответ #4 : Июль 21, 2009, 08:38 »

попробуй использовать disconnect (для разъединения сингала и слота) в теле слота, который вызывается.
Цитировать
bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method )   [static]
Disconnects signal in object sender from method in object receiver. Returns true if the connection is successfully broken; otherwise returns false.
Спасибочки!!!Все получилось!!!!Только вот, если закроется эта формочка и придется заново ее создать двойным щелчком...тогда таблица уже не среагирует на него ((((

...
а ты будь хитрее: при создании формочки делай connect, а после двойного щелчка - disconnect Улыбающийся
Записан
Evgeniya
Гость
« Ответ #5 : Июль 21, 2009, 08:46 »

а ты будь хитрее: при создании формочки делай connect, а после двойного щелчка - disconnect Улыбающийся
ну так втрорая формочка и создается только по двойному щелчку...а если я после этого разъеденю, то двойной щелчок не среагируется и соответственно формочка никогда не создасться
Надо видимо проверять на закрытость формы, типо
if(!form->isVisible()) connect(ui.tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(lpu()));
но в каком месте??или так не прокатит??
Записан
Karl-Philipp
Гость
« Ответ #6 : Июль 21, 2009, 08:55 »

а ты будь хитрее: при создании формочки делай connect, а после двойного щелчка - disconnect Улыбающийся
ну так втрорая формочка и создается только по двойному щелчку...а если я после этого разъеденю, то двойной щелчок не среагируется и соответственно формочка никогда не создасться
Надо видимо проверять на закрытость формы, типо
if(!form->isVisible()) connect(ui.tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(lpu()));
но в каком месте??или так не прокатит??

а что если ловить сигнал закрытия второй формочки и, поймав этот сигнал, сделать в слоте приведенный выше коннект?
Записан
Evgeniya
Гость
« Ответ #7 : Июль 21, 2009, 09:06 »

а что если ловить сигнал закрытия второй формочки и, поймав этот сигнал, сделать в слоте приведенный выше коннект?
можно и так попробовать...это значит надо closeEvent() перегрузить у второй формочки,да???
Хотя я вставила
if(!zak->isVisible())
connect(ui.tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(lpu()));
в слот,который обрабатывает одинарный щелчок
и все нормально работает))) И все потому, как мне кажется, что при двойном щелчке сигнал с одинарным щелчком тоже реагирут...
Записан
ритт
Гость
« Ответ #8 : Июль 21, 2009, 09:10 »

И все потому, как мне кажется, что при двойном щелчке сигнал с одинарным щелчком тоже реагирут...
если правильно помню, так оно и есть.
Записан
Evgeniya
Гость
« Ответ #9 : Июль 21, 2009, 09:16 »

И все потому, как мне кажется, что при двойном щелчке сигнал с одинарным щелчком тоже реагирут...
если правильно помню, так оно и есть.
помоему при первом нажатии и втором отпускании срабатывает этот сигнал:
clicked(QModelIndex)
Записан
Evgeniya
Гость
« Ответ #10 : Июль 21, 2009, 14:00 »

видимо нужно как-то сделать так чтобы при двойном щелчке  не вызывались события mousePressEvent ( QMouseEvent * event ) и mouseReleaseEvent ( QMouseEvent * event )...это вообще возможно так сделать???
Записан
Evgeniya
Гость
« Ответ #11 : Июль 21, 2009, 15:30 »

Все проблема решена...вместо сигнала
clicked(QModelIndex) использовать pressed(QModelIndex)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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