Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: VAP от Июнь 30, 2008, 21:13



Название: Вопрос по QPushButton и не только...
Отправлено: VAP от Июнь 30, 2008, 21:13
Нигде не нашел  как сделать кнопку-триггер(для смены шрифта, например), которая не меняет свое состояние (Enabled(true) или Enabled(false)), а по каждому нажатию на эту кнопку должны выполняться два разных действия. В Assistant нашел класс QActionEvent, у которого есть ActionChanged и ActionAdded (что-то вроде предыдущего состояния). Попробовал сделать вот так, пример кода:

Код:
void MainWindow::actionEvent(QActionEvent *event)
{
    QAction *action = event->action();
    QObject *obj = sender();
    if (qobject_cast<QPushButton*>(obj)) {
      if (event->type() == QEvent::ButtonPress) {
       
        switch(event->type()) {
        case QEvent::ActionChanged:
               setChangeAction(action);
               break;
        case QEvent::ActionAdded:
            connect(action, SIGNAL(triggered()), this, SLOT(triggeredAct()));
            break;
        default:
            ;
        }
        return;
    }
}   

void MainWindow::setChangeAction(QAction *action)
{
       addAction(action);
       reg->setText(action->iconText());
       reg->setIcon(action->icon());
}

void MainWindow::triggeredAct()
{
    if(QAction *action = qobject_cast<QAction*>(reg))
       emit triggered(action);
       действие…
    }
но чего-то не хватает, или есть иной какой способ? Буду очень благодарен за толковый совет.


Название: Re: Вопрос по QPushButton и не только...
Отправлено: Sergeich от Июнь 30, 2008, 22:08
Ниасилил... Можно попонятней че надо сделать-то?


Название: Re: Вопрос по QPushButton и не только...
Отправлено: VAP от Июнь 30, 2008, 22:18
Нужно чтобы при нажатии на одну кнопку могли выполняться два разных события (можно подключить 2 разных слота), причем циклически.


Название: Re: Вопрос по QPushButton и не только...
Отправлено: Примерный ученик от Июнь 30, 2008, 22:28
А если при действии менять надпись на кнопке, и реагировать в соответствии с текущей надписью?


Название: Re: Вопрос по QPushButton и не только...
Отправлено: VAP от Июнь 30, 2008, 22:36
Нужно менять надпись на кнопке при каждом очередном нажатии (раскладка клавиатуры
с "RUS" на "LAT") и еще при этом выполняются, при каждом очередном нажатии, два независимых действия.
Весь вопрос как их отловить(события), т.к. сигнал отловить тоже проблема.


Название: Re: Вопрос по QPushButton и не только...
Отправлено: ритт от Июнь 30, 2008, 22:38
QActionEvent - вообще не в тему
весьма туманная формулировка /* пиши тз на заказ */
что значит "циклически"? нажали один раз - выполнилось событие1, нажали второй - событие2, третий - событие1 ?
если да {
 если баттон - акшен (например, кнопка на тулбаре) {
  сконнекть триггеред акшена со слотом, в котором по состоянию акшена будет выполнять действие1 или действие2
  void QAction::setData ( const QVariant & userData ) / QVariant QAction::data () const
 }
 иначе {
  то же самое, но с использованием динамикпроперти объекта
 }
}
иначе {
 выражай свои мысли яснее
}
самый простой вариант, который пришёл в голову


Название: Re: Вопрос по QPushButton и не только...
Отправлено: Karl-Philipp от Июнь 30, 2008, 22:48
Нужно менять надпись на кнопке при каждом очередном нажатии (раскладка клавиатуры
с "RUS" на "LAT") и еще при этом выполняются, при каждом очередном нажатии, два независимых действия.
Весь вопрос как их отловить(события), т.к. сигнал отловить тоже проблема.

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

Или я не понял тз  ???


Название: Re: Вопрос по QPushButton и не только...
Отправлено: VAP от Июнь 30, 2008, 22:52
Спасибо Константин, понял меня совершенно правильно. Буду работать над предложенным вариантом.   


Название: Re: Вопрос по QPushButton и не только...
Отправлено: ритт от Июнь 30, 2008, 23:07
ну, для переключалки действительно лучше завести переменную - будет гораздо проще
а вариант выше - ближе для случая, когда кнопок множество и от состояния каждой могло бы что-то зависеть


Название: Re: Вопрос по QPushButton и не только...
Отправлено: Red Devil от Июль 01, 2008, 00:29
Еще можно сделать для кнопки setCheckable, это сделает ее toogle button.
Это тоже самое что завести переменную bool, только ничего не нужно самому менять, только состояние проверять методом checked().