Russian Qt Forum
Апреля 30, 2025, 02:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QButton и сигналы от них  (Прочитано 6012 раз)
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

Сообщений: 587


Просмотр профиля
« Ответ #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.042 секунд. Запросов: 20.