Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Evgeniya от Июль 21, 2009, 07:49



Название: Синхронизация двух таблиц
Отправлено: Evgeniya от Июль 21, 2009, 07:49
Всем здраствуйте!!!
У меня есть одна формочка с таблицей и при двойном щелчке по строчке таблицы выскакивает другая формочка с таблицей, с данными соответствующими этой строчке...И вот я хочу, чтобы при двйном щелчке первый раз выскакивала эта вторая форма и в последующем,чтобы двойной щелчок больше не обрабатывался и при одинарном щелчке менялись просто данные в таблице на второй форме...И вот вопрос, как же сделать, чтобы на двойной щелчок таблица реагировала только один раз, а все дальнейшее время толко на одинарный и этот первый раз она бы не реагировала на одинарный???просто у меня такое ощущение, что при двойном щелчке срабатывают оба слота(для двойного и одинарного щелчка)


Название: Re: Синхронизация двух таблиц
Отправлено: Karl-Philipp от Июль 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.


Название: Re: Синхронизация двух таблиц
Отправлено: ecspertiza от Июль 21, 2009, 08:00
просто у меня такое ощущение, что при двойном щелчке срабатывают оба слота(для двойного и одинарного щелчка)

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


Название: Re: Синхронизация двух таблиц
Отправлено: Evgeniya от Июль 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()));


Название: Re: Синхронизация двух таблиц
Отправлено: Karl-Philipp от Июль 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 :)


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


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

а что если ловить сигнал закрытия второй формочки и, поймав этот сигнал, сделать в слоте приведенный выше коннект?


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


Название: Re: Синхронизация двух таблиц
Отправлено: ритт от Июль 21, 2009, 09:10
И все потому, как мне кажется, что при двойном щелчке сигнал с одинарным щелчком тоже реагирут...
если правильно помню, так оно и есть.


Название: Re: Синхронизация двух таблиц
Отправлено: Evgeniya от Июль 21, 2009, 09:16
И все потому, как мне кажется, что при двойном щелчке сигнал с одинарным щелчком тоже реагирут...
если правильно помню, так оно и есть.
помоему при первом нажатии и втором отпускании срабатывает этот сигнал:
clicked(QModelIndex)


Название: Re: Синхронизация двух таблиц
Отправлено: Evgeniya от Июль 21, 2009, 14:00
видимо нужно как-то сделать так чтобы при двойном щелчке  не вызывались события mousePressEvent ( QMouseEvent * event ) и mouseReleaseEvent ( QMouseEvent * event )...это вообще возможно так сделать???


Название: Re: Синхронизация двух таблиц
Отправлено: Evgeniya от Июль 21, 2009, 15:30
Все проблема решена...вместо сигнала
clicked(QModelIndex) использовать pressed(QModelIndex)