Сгруппируйте QRadioButtons в строках из QTableWidget - PullRequest
2 голосов
/ 28 марта 2012

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

MainWindow interface

Однако я не могу сгруппировать 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);
}

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

1 Ответ

4 голосов
/ 28 марта 2012

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

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

...