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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QButton и сигналы от них  (Прочитано 5630 раз)
ysfox
Гость
« : Октябрь 19, 2010, 11:47 »

Добрый день есть такой вопрос сделал пользовательский интерфейс на котором расположен QStackedWidget и кнопки с помощью которых можно переходить по страницам. но возникла проблема: кнопки на страницах расположены так что накладываются одна на другую и при нажатии на одну кнопку при переходе на следующую станицу иногда случается что нажимаешь и на другую кнопку. вот подумал может есть какая то функция которая отключает сигналы срабатывания кнопок? чтоб отключать их при переходе с страницы на страницу на некоторое время... отключить глобально все кнопки ну или только некоторые, запретить сигналы прерываний от них.
уже все перепробовал, другого варианта исправить эту ошибку просто не вижу(
Помогите пожалуйста
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 19, 2010, 11:51 »

QObject::disconnect()
Записан

Qt 5.11/4.8.7 (X11/Win)
SABROG
Гость
« Ответ #2 : Октябрь 19, 2010, 11:57 »

Как они могут накладываться я не пойму? Такая возможность есть только у QStackedLayout да и то это надо специально указывать флаг QStackedLayout::StackAll.
Записан
ysfox
Гость
« Ответ #3 : Октябрь 19, 2010, 12:08 »

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

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

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

« Последнее редактирование: Октябрь 19, 2010, 12:11 от ysfox » Записан
SABROG
Гость
« Ответ #4 : Октябрь 19, 2010, 12:15 »

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

Это тот случай, когда Qt слишком быстрая для пользователей Веселый?
Записан
ysfox
Гость
« Ответ #5 : Октябрь 19, 2010, 12:30 »

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

думал задержки поставить но тогда выглядеть будет не очень(( будет складиватся впечатление что программа подвисает) а так просто незаметно кнопки будут на некоторое время просто не активными)
Записан
ysfox
Гость
« Ответ #6 : Октябрь 19, 2010, 15:59 »

сделал все с помощью blockSignals(true) - вроде работает хорошо)
но еще б забрать как то нажатие самой клавиши. ато при тесте вижу что клавиша нажимается а обработчик не вызывается, это уже хорошо)... вот только б еще в это время сама клавиша никак не реагировала было б совсем классно)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Октябрь 19, 2010, 19:06 »

Цитировать
вот только б еще в это время сама клавиша никак не реагировала было б совсем классно)
Повесь eventFilter() и дропай события.
Записан

Qt 5.11/4.8.7 (X11/Win)
Mikhail
Программист
*****
Offline Offline

Сообщений: 586


Просмотр профиля
« Ответ #8 : Октябрь 19, 2010, 19:24 »

Используй setEnabled( bool ) . Сначала делай кнопку не активной. И не будет видно нажатие. Затем восставливай активность
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Октябрь 19, 2010, 19:28 »

Цитировать
Используй setEnabled( bool ) . Сначала делай кнопку не активной. И не будет видно нажатие. Затем восставливай активность
Можно и так, но кнопка будет "мерцать".
Записан

Qt 5.11/4.8.7 (X11/Win)
ysfox
Гость
« Ответ #10 : Октябрь 20, 2010, 10:11 »

тоже подумал за SetEnabled(), но  при єтом меняется стиль надписи на кнопке и єто заметно...
а вот eventFilter() попробую, я в принципе ним никогда не пользовался, надо будет  в интернете примеры поискать... не могли б Вы скинуть хоть какой то маленький пример как его использовать?
пожалуйста
а щас еще сам в интернете гляну)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Октябрь 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 нет такой нужной фишки Непонимающий
« Последнее редактирование: Октябрь 20, 2010, 10:46 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
ysfox
Гость
« Ответ #12 : Октябрь 20, 2010, 12:15 »

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

Спасибо!!!
теперь все заработало как надо Улыбающийся

ну наверно, те кто разрабатывал программу сочли ее ненужной... в кюти есть много чего такого, что хотелось бы чтоб добавили)
« Последнее редактирование: Октябрь 20, 2010, 16:18 от ysfox » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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