インタラクティブボードゲームの実装でQTableViewを使用しています。表のセルに画像が表示されます。QStyledItemDelegateとpaint関数を使用して、テーブルセル内に画像を描画しています。
画像はテーブルの特定のセルにのみ表示され、ユーザーがテーブルセルをクリックすると更新される必要があるため、テーブルと同じサイズのdoubleint配列が使用されます。配列の値に応じて、画家はテーブルの特定のセルに画像を描画する必要があります。最初は、テーブルの4つのセル内に4つの画像しかありません。ユーザーがテーブル内のセルをクリックすると、配列が更新されます。これは、テーブルのセル内に描画および表示されるものを変更する必要があることを意味します。
通常、ユーザーは正常に更新された空の(白い)セルをクリックすると、特定の画像がセルに表示されます。ただし、画像を含み、更新する必要がある他のセルがある場合、double int配列は更新されますが、更新は表示されません。また、表示が更新されているはずのセルをクリックすると、更新が行われるという奇妙なこともわかりました。もちろん、このコースは、誰かがセルをクリックしたときに更新する方法に関係なく発生します。
再描画する前に、まずセル内の内容を消去しようとしましたが、それでも機能しません。デリゲートはスレッド内で継続的に実行され、ペインタ関数はテーブル内の各セルのインデックスを使用して呼び出されますか?画家がセルの領域を再描画する必要があり、セルをクリックした後にのみ発生するにもかかわらず、画像を含むセルの更新が自動的に更新されない方法がわかりません。または、そのcusは、毎回新しい画家が画家の機能に呼び出されますか?!
さて、これが代表者の画家の機能の私の実装です:
void Sphere::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if(tb1[index.row()][index.column()] == 1)
{
QImage Q1("Red Sphere.jpg");
QRectF source(0.0, 0.0, 72.0, 70.0);
painter->eraseRect(option.rect);
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
painter->drawImage(option.rect, Q1, source);
}
else if(tb1[index.row()][index.column()] == 2)
{
QImage Q1("Blue Sphere.jpg");
QRectF source(0.0, 0.0, 72.0, 70.0);
painter->eraseRect(option.rect);
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
painter->drawImage(option.rect, Q1, source);
}
else
{
painter->eraseRect(option.rect);
QStyledItemDelegate::paint(painter, option, index);
}
}
私の問題を解決する必要がある場合は、さらに情報を提供できます。前もって感謝します。