2013-10-13 2 views
1

Я использую StackedLayout и кнопки для переключения между экранами. У меня есть отдельный стиль, если кнопка отмечена или нет. Я также использую keyPressEvent для переключения между стеками вместо нажатия на кнопку для переключения.Qt проверка состояния нескольких кнопок

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

У меня есть 4 кнопки и для каждого я написал методы, чтобы увидеть, если кнопка нажата или нет, как так:

bool MainWindow::dashBoardButton_isChecked() { 
    if(ui->dashBoardButton->isChecked()) { 
     return true; 
    } else { 
     return false; 
    }; 

    return false; 
}; 

и при переключении между стеками, я использую этот метод:

void MainWindow::on_dashBoardButton_clicked() { 
    ui->mainStack->setCurrentIndex(0); 

    if(!dashBoardButton_isChecked()) { 
     ui->dashBoardButton->setChecked(true); 
    }; 

}; 

Я делаю это 4 раза для каждой кнопки/стека. Мне кажется, что я немного повторяюсь. Есть ли способ сократить код, и, возможно, вместо 4 очень похожих методов, вместо этого есть один метод?

+1

Проверьте 'QButtonGroup'. –

ответ

0

В mainwindow.h добавить следующее:

#include <QPushButton> 

и добавить этот прототип:

bool isChecked(QPushButton *btn); 

в ма inwindow.c добавить эту функцию:

bool MainWindow::isChecked(QPushButton *btn) { 
    if (btn->isChecked()) 
     return true; 
    return false; 
} 

Теперь вы можете использовать эту функцию, чтобы проверить, не установлены ли ваши кнопки.

p.s. Я использую QPushButton в качестве примера .. вы должны использовать тип своих кнопок

0

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

Keypad::Keypad(QWidget *parent) 
     : QWidget(parent) 
    { 
     QSignalMapper *signalMapper = new QSignalMapper(this); 
     connect(signalMapper,SIGNAL(mapped(int)),this,SIGNAL(digitClicked(int))); 

     for (int i = 0; i < 10; ++i) { 
      QString text = QString::number(i); 
      buttons[i] = new QPushButton(text, this); 
      signalMapper->setMapping(buttons[i], i); 
      connect(buttons[i], SIGNAL(clicked()), signalMapper, SLOT(map())); 
     } 

     createLayout(); 
    } 

http://qt-project.org/doc/qt-5.0/qtcore/qsignalmapper.html

http://doc.qt.digia.com/qq/qq10-signalmapper.html

Смежные вопросы