2012-03-27 3 views
2

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

MainWindow interface

Однако, я не могу сгруппировать QRadioButton s по строкам. В самом деле, с этим текущим пользовательским интерфейсом я могу выбрать только одно радио от 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); 
} 

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

ответ

4

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

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

+0

Brillant. Большое спасибо. –

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