首页 > 其他分享 >QTableWidget里加单选框QRadioButton

QTableWidget里加单选框QRadioButton

时间:2022-10-19 18:35:01浏览次数:54  
标签:box 单选框 int button QTableWidget 选中 QRadioButton

拿到程序的美工图,某个界面,列表第一列的序号变成了单选框,选择这个单选这一行都是选中状态。我原来的界面就是行选中状态,现在就变序号为单选框,且将这个单选框融入行选择里,选择某一项,整个行都选中,包括前面的单选框,选中某个单选框,整个行也是选中状态。

1、加入的单选框QRadioButton居中

通过setCellWidget加QRadioButton,发现加入的单选框不居中。网上资料是加个布局的方式,试过后发现单选变得不单选了,想到用qss样式,发现可以通过改padding让单选框大致居中。

QRadioButton * box = new QRadioButton;
box->setStyleSheet("padding:0px 45px 0px;"); //45是左右,上下是0

2、选择单选框,选中当前行

看了QRadioButton的信号,发现只能判断自己是否选中,不能判断所在表格行号,看网上要配合QButtonGroup使用,加了个QButtonGroup的全局变量。

button_group = new QButtonGroup;
button_group->setExclusive(true);
for (int i = 0; i < size; i++)
{
    ui.tableWidget->insertRow(i);
    QRadioButton * box = new QRadioButton;
    button_group->addButton(box, i);
    box->setStyleSheet("padding:0px 45px 0px;");
    ui.tableWidget->setCellWidget(i, 0, box);
}

这样可以使用QButtonGroup的信号,活动单选框的id和选中状态。

[signal] void QButtonGroup::buttonToggled(int id, bool checked)

自己写个对应槽函数,当选中单选框时,它的id就是表的行号,在上个代码第6行赋值的,这样选择表除了单选框外任意项,就选中了该行。

void clickedRadioButton(int id, bool check)
{
    if (check)
    {
        ui.tableWidget->setCurrentCell(id, 1);
    }
}

3、选择表某一行,同行的单选框也选中

选择表某一行,可以知道选择的行号,就可以知道选择的单选框的id,然后setChecked(true)让该单选框为选中状态。自己写的另一个槽函数。

void clickedTableWidget(int row, int column)
{
    button_group->button(row)->setChecked(true);
}

最后别忘了加上信号槽的connect。

connect(button_group, SIGNAL(buttonToggled(int,bool)), this, SLOT(clickedRadioButton(int,bool)));
connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(clickedTableWidget(int,int)));

标签:box,单选框,int,button,QTableWidget,选中,QRadioButton
From: https://www.cnblogs.com/lely/p/16807315.html

相关文章