Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ysfox от Октябрь 19, 2010, 11:47



Название: QButton и сигналы от них
Отправлено: ysfox от Октябрь 19, 2010, 11:47
Добрый день есть такой вопрос сделал пользовательский интерфейс на котором расположен QStackedWidget и кнопки с помощью которых можно переходить по страницам. но возникла проблема: кнопки на страницах расположены так что накладываются одна на другую и при нажатии на одну кнопку при переходе на следующую станицу иногда случается что нажимаешь и на другую кнопку. вот подумал может есть какая то функция которая отключает сигналы срабатывания кнопок? чтоб отключать их при переходе с страницы на страницу на некоторое время... отключить глобально все кнопки ну или только некоторые, запретить сигналы прерываний от них.
уже все перепробовал, другого варианта исправить эту ошибку просто не вижу(
Помогите пожалуйста


Название: Re: QButton и сигналы от них
Отправлено: GreatSnake от Октябрь 19, 2010, 11:51
QObject::disconnect()


Название: Re: QButton и сигналы от них
Отправлено: SABROG от Октябрь 19, 2010, 11:57
Как они могут накладываться я не пойму? Такая возможность есть только у QStackedLayout да и то это надо специально указывать флаг QStackedLayout::StackAll.


Название: Re: QButton и сигналы от них
Отправлено: ysfox от Октябрь 19, 2010, 12:08
Как они могут накладываться я не пойму?
да нет может я просто плохо объяснил) на каждой странице стацкет виджета внизу стоят свои разные кнопки которые что то выполняют (на каждой странице их разное количество и действия) так вот, при нажатие на кнопку например "дальше" мы переходим на следующую страницу стацкет виджета и иногда случайно выходит сразу нажимаем на какую то кнопку потому что там палец дрогнул или ещо что то)... потому и хотел сделать эти кнопки ну хотя б на 1секунду не активными чтоб такого не случалось)

спасибо за дисконнект даже не подумал...
а что скажете на щет : ui->pushButton->blockSignals(true)? только что нашел, это свойство...
что лучше применить?

и можно както это свойство применить глобально ко всем кнопкам или надо указывать каждую по отдельности?



Название: Re: QButton и сигналы от них
Отправлено: SABROG от Октябрь 19, 2010, 12:15
так вот, при нажатие на кнопку например "дальше" мы переходим на следующую страницу стацкет виджета и иногда случайно выходит сразу нажимаем на какую то кнопку потому что там палец дрогнул или ещо что то)... потому и хотел сделать эти кнопки ну хотя б на 1секунду не активными чтоб такого не случалось)

Это тот случай, когда Qt слишком быстрая для пользователей :D?


Название: Re: QButton и сигналы от них
Отправлено: ysfox от Октябрь 19, 2010, 12:30
Это тот случай, когда Qt слишком быстрая для пользователей :D?
да как раз этот случай)))

думал задержки поставить но тогда выглядеть будет не очень(( будет складиватся впечатление что программа подвисает) а так просто незаметно кнопки будут на некоторое время просто не активными)


Название: Re: QButton и сигналы от них
Отправлено: ysfox от Октябрь 19, 2010, 15:59
сделал все с помощью blockSignals(true) - вроде работает хорошо)
но еще б забрать как то нажатие самой клавиши. ато при тесте вижу что клавиша нажимается а обработчик не вызывается, это уже хорошо)... вот только б еще в это время сама клавиша никак не реагировала было б совсем классно)


Название: Re: QButton и сигналы от них
Отправлено: GreatSnake от Октябрь 19, 2010, 19:06
Цитировать
вот только б еще в это время сама клавиша никак не реагировала было б совсем классно)
Повесь eventFilter() и дропай события.


Название: Re: QButton и сигналы от них
Отправлено: Mikhail от Октябрь 19, 2010, 19:24
Используй setEnabled( bool ) . Сначала делай кнопку не активной. И не будет видно нажатие. Затем восставливай активность


Название: Re: QButton и сигналы от них
Отправлено: GreatSnake от Октябрь 19, 2010, 19:28
Цитировать
Используй setEnabled( bool ) . Сначала делай кнопку не активной. И не будет видно нажатие. Затем восставливай активность
Можно и так, но кнопка будет "мерцать".


Название: Re: QButton и сигналы от них
Отправлено: ysfox от Октябрь 20, 2010, 10:11
тоже подумал за SetEnabled(), но  при єтом меняется стиль надписи на кнопке и єто заметно...
а вот eventFilter() попробую, я в принципе ним никогда не пользовался, надо будет  в интернете примеры поискать... не могли б Вы скинуть хоть какой то маленький пример как его использовать?
пожалуйста
а щас еще сам в интернете гляну)


Название: Re: QButton и сигналы от них
Отправлено: GreatSnake от Октябрь 20, 2010, 10:44
Перегружаешь QMainWindow:

Код
C++ (Qt)
#include <QApplication>
#include <QMainWindow>
 
class MaintWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow( QWidget * parent = 0, Qt::WindowFlags flags = 0 )
: QMainWindow( parent, flags )
, busy_( false )
{
   qApp->installEventFilter( this );
}
virtual ~MainWindow() {}
void setBusy( bool set ) { busy_ = set; }
bool busy() const { return busy_; }
 
protected:
bool eventFilter( QObject* o, QEvent* e )
{
           if( o == this )
               return false;
 
   QWidget* w = o->isWidgetType() ? qobject_cast< QWidget* >( o ) : 0;
 
   if( w && w->window() == this )
   {
if( e->type() == QEvent::KeyPress ||
e->type() == QEvent::KeyRelease ||
e->type() == QEvent::MouseButtonPress ||
e->type() == QEvent::MouseButtonRelease ||
e->type() == QEvent::MouseButtonDblClick ||
e->type() == QEvent::MouseMove ||
e->type() == QEvent::ContextMenu ||
e->type() == QEvent::Wheel )
{
   if( busy_ )
       return true;
}
   }
   return false;
}
private:
bool busy_;
};
 

Перед изменением текущего виджета вызываешь MaintWindow::setBusy( true ), а после MaintWindow::setBusy( false ).

На самом деле мне непонятно почему в Qt нет такой нужной фишки ???


Название: Re: QButton и сигналы от них
Отправлено: ysfox от Октябрь 20, 2010, 12:15
На самом деле мне непонятно почему в Qt нет такой нужной фишки ???

Спасибо!!!
теперь все заработало как надо :)

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