QTableWidgetまたはQListWidgetにチェックボックス/ラジオボタン/コンボボックスを追加するにはどうすればよいですか?
アイテムの setCheckState メソッドを使用したチェックボックスの場合、リストウィジェットとテーブルウィジェットの両方に必要なことを行う必要があります。以下のコードがうまくいくかどうかを確認してください:
リストウィジェット:
QListWidgetItem *item0 = new QListWidgetItem(tr("First"), listWidget);
QListWidgetItem *item1 = new QListWidgetItem(tr("Second"), listWidget);
item0->setCheckState(Qt::Unchecked);
item1->setCheckState(Qt::Checked);
テーブルウィジェット:
QTableWidgetItem *item2 = new QTableWidgetItem("Item2");
item2->setCheckState(Qt::Checked);
tableWidget->setItem(0, 0, item2);
他のタイプのエディターのウィジェットにはデリゲート( QItemDelegate )を使用できます。例は次のとおりです スピンボックスデリゲートの例 。
これがお役に立てば幸いです。
2つの方法があります。
void QTableWidget::setCellWidget ( int row, int column, QWidget * widget )
そして
void QListWidget::setItemWidget ( QListWidgetItem * item, QWidget * widget )
QWidgetを継承するウィジェットやその他のコントロールを挿入できます。チェックボックス/ラジオボタン/コンボボックスはQWidget
から継承します。
このようなチェックボックスを追加することもできます
#include <QCheckBox>
void addCheckBoxAt(int row_number, int column_number,int state)
{
// Create a widget that will contain a checkbox
QWidget *checkBoxWidget = new QWidget();
QCheckBox *checkBox = new QCheckBox(); // We declare and initialize the checkbox
QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget); // create a layer with reference to the widget
layoutCheckBox->addWidget(checkBox); // Set the checkbox in the layer
layoutCheckBox->setAlignment(Qt::AlignCenter); // Center the checkbox
layoutCheckBox->setContentsMargins(0,0,0,0); // Set the zero padding
/* Check on the status of odd if an odd device,
* exhibiting state of the checkbox in the Checked, Unchecked otherwise
* */
if(state == 1){
checkBox->setChecked(true);
} else {
checkBox->setChecked(false);
}
ui->job_table_view->setCellWidget(row_number,column_number, checkBoxWidget);
// Another way to add check box as item
/*
// QTableWidgetItem *checkBoxItem = new QTableWidgetItem("checkbox string ");
QTableWidgetItem *checkBoxItem = new QTableWidgetItem();
checkBoxItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
checkBoxItem->setCheckState(Qt::Checked);
ui->job_table_view->setItem(row_number,column_number,checkBoxItem);
*/
}
//次のように呼び出します
addCheckBoxAt(0,0,1); // insert checkbox it 0,0 and check status true