0

QTableView示すがありますQSqlQueryModel。モデルには、次のように、最初の列の各行に作成されたチェックボックスが含まれています (ref_no; 私のデータベースの主キーを含む)。

void MainWindow::showM(model){
    ui->tableView->setModel(model);
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    for( int i = 0; p<model->rowCount(); i++)
    {
        QCheckBox *checkBox = new QCheckBox();
        ui->tableView->setIndexWidget(model->index(i,0),checkBox);
    }
    ui->tableView->show();
}

...そして、必要なすべての情報とチェックボックスを表示して、正常に機能しています。

ここで、隣接するチェックボックスがチェックされている ref_no を取得する必要があります。

どうやってするか ?

4

1 に答える 1

1

を使用しますQSignalMapper(または、またはラムダを使用するマッパーを含むアドホック ソリューションsender())。たとえば、マッピングのメンバーを定義します。

QHash<QCheckBox *, int> m_mapping;

次に、コードで次のように接続します。

QCheckBox *checkBox = new QCheckBox();
ui->tableView->setIndexWidget(model->index(i,0),checkBox);
m_mapping[checkBox] = i;
connect(checkBox, &QCheckBox::toggled, this, &MainWindow::onCheckBoxToggled);

次に、次のようにスロットを定義します。

// for the love of kittens use proper names for methods
void MyWindow::onCheckBoxToggled(bool toggled) {
    QCheckBox *box = static_cast<QCheckBox *>(sender());
    const int id = m_mapping.value(box);
    // do something
}

または、ラムダが好きな場合は、キャプチャで上記を実行できます。

connect(checkBox, &QCheckBox::toggled, 
        [i](bool toggled){ /* use i, toggled */ });

そうは言っても、私は を作成して使用するという考えに反対することを強くお勧めします。QCheckBoxessetIndexWidget代わりに、フラグを返すことで列を充実させ、 .Qt::ItemIsUserCheckableQt::CheckStateRole

于 2015-12-21T00:10:27.153 に答える