我正在使用StackedLayout和Buttons在屏幕之间切换。如果选中或不选中按钮,我有一个单独的样式。我也使用keyPressEvent在堆栈之间切换,而不是单击要切换的按钮。
当我使用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个非常相似的方法,而不是有一种方法呢?
答案 0 :(得分: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();
}
答案 1 :(得分:0)
在mainwindow.h中添加:
#include <QPushButton>
并添加此原型:
bool isChecked(QPushButton *btn);
在mainwindow.c中添加此功能:
bool MainWindow::isChecked(QPushButton *btn) {
if (btn->isChecked())
return true;
return false;
}
现在您可以使用此功能检查您的按钮是否已被选中。
P.S。我使用QPushButton作为示例..你必须使用按钮的类型