0

Qt を学び始めたので、QTableView を介してデータで満たされたテーブルを実装したいと考えています。私の問題は、セルからチェックボックスを削除する方法がわからないことです。デフォルトで入れられているようです。

ただし、NULL-QVariant を返す必要があることを読みましたが、入力するデータがまだあるため、それは探していたものではありません。

これまでの私のコードは次のとおりです。

QVariant MyModel::data(const QModelIndex &index, int role) const
{
int row = index.row();
int col = index.column();
QString daten;

switch (col)
{
case 0:
{
    daten = "column 1";
    break;
}
case 1:
{
    daten = "column 2";
    break;
}
case 2:
{
    daten = "column 3";
    break;
}
case 3:
{
    daten = "column 4";
    break;
}
}

return daten;
}

ご覧のとおり、「daten」という QString でセルを埋めたいと思います。ただし、文字列の横には、すべてのセルにチェックボックスがあります。

誰かがチェックボックスを削除する方法を知っていますが、コンテンツを「daten」で埋めますか?

ありがとう!

4

1 に答える 1

2

あなたのセルにQTableViewいくつかのチェックボックスがあるという事実は、ユーザーがチェックできるように定義されていることを示唆しています。Qt.ItemIsUserCheckableの定義のどこかでフラグが有効になっていないかどうかを確認しQTableView、そうであれば無効にします。flagsたとえば、すべてのエントリを強制的にチェックできないようにするなど、メソッドを変更してみてください。

追加のコメントとして、::dataメソッドを変更して、 が無効な場合を考慮しindex、ロールが に対応する場合にのみ何らかの値を返すようにする必要がありますQt.DisplayRole。Python では、構文は次のようになります。

if index.isvalid():
    if (role == Qt.DisplayRole):
        (row, col) = (index.row(), index.column()
        return_something_depending_on_col
    return QVariant()
return QVariant()

そうしないと、コードがクラッシュする可能性があります。

テストでroleは、アクセスするデータの種類を選択できます。ドキュメントには、たとえば次のように記載されています。

モデル内の各アイテムには、それぞれに独自の役割を持つ一連のデータ要素が関連付けられています。ロールは、必要なデータのタイプをモデルに示すためにビューによって使用されます。カスタム モデルは、これらの型でデータを返す必要があります。

基本的な役割はで、現在のセルQt.DisplayRoleに対応する を返します。QStringあなたQBrushの役割がQt.BackgroundRole...

必須ではありませんが、これらのテストroleは依然として強く推奨されています。これにより、コードがよりクリーンになり、保守が容易になります。

于 2012-09-01T13:51:36.300 に答える