Сгруппируйте QRadioButtons в строки из QTableWidget

Я хотел бы создать окно в Qt, содержащее QTableWidget, состоящее из 4 столбцов, один из которых состоит из текста, а последние 3 — QRadioButtons.
Мне удалось создать это:

Интерфейс главного окна

Однако я не могу сгруппировать QRadioButton по строке. Действительно, с этим текущим пользовательским интерфейсом я могу выбрать только ОДНО радио из 30 отображаемых, а не по одному в строке.
Вот мой код:

// 1st col stretchable, other 3 fixed width
QHeaderView *header = ui->tableWidget->horizontalHeader();
header->setResizeMode(QHeaderView::Stretch);
header->setResizeMode(1, QHeaderView::Interactive);
header->setResizeMode(2, QHeaderView::Interactive);
header->setResizeMode(3, QHeaderView::Interactive);

// Can't select lines
ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);

// Test: fill the list
ui->tableWidget->setRowCount(10);
QLabel *nom;
QRadioButton *radio1, *radio2, *radio3;
for (int i = 0; i < 10; i++) {
    nom = new QLabel();
    nom->setText(QString("test")+QString::number(i));
    ui->tableWidget->setCellWidget(i, 0, nom);

    radio1 = new QRadioButton();
    radio2 = new QRadioButton();
    radio3 = new QRadioButton();
    ui->tableWidget->setCellWidget(i, 1, radio1);
    ui->tableWidget->setCellWidget(i, 2, radio2);
    ui->tableWidget->setCellWidget(i, 3, radio3);
}

Как я могу это сделать?


person Benoit Duffez    schedule 27.03.2012    source источник


Ответы (1)


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

Что вам нужно сделать, так это в конце каждого цикла создать новую QButtonGroup, установить кнопок, чтобы проверить, а затем добавить все 3 в группу кнопок. Теперь каждая из этих строк будет эксклюзивной только в группе QButtonGroup, которую вы создали для каждой строки.

person jdi    schedule 27.03.2012