4

QCalendarWidget を有効または無効な日付 (範囲の日付だけでなく) で使用しようとしていますが、不可能に見えます ( https://bugreports.qt.io/browse/QTBUG-198 )。

paintEvent メソッド(または他の何か)でこれを行うことが可能かどうか知っていますか?

読んでくれてありがとう :)

4

1 に答える 1

3

私はいくつかの研究をしました。カレンダー ウィジェットには、通常のモデル ( ) を持つ通常のQTableViewサブクラス ( ) が含まれています。私の試みは、ビューと変更のプロキシモデルを追加し、無効にしたい日付の無効状態を返す関数を追加することでした。しかし、セルに表示される日付を知る必要がありました。そのための方法はありますが、コードからはアクセスできません。これはかなり複雑で、の実装に依存します。QCalendarViewQCalendarModeldata()flags()QCalendarModel::dateForCellQCalendarModel

なので、これはなかなかできないと思います。私が見る唯一の方法は、QCalendarWidgetソースをプロジェクトにコピーし、クラスの名前を変更して、既存の Qt クラスに沿った競合を回避することです。その後、実装を変更できます。最小日付と最大日付が使用されている場所 (QCalendarModel::flags関数内など) では、有効/無効のクラス リストを使用して置き換える必要があります。

私の試みで何か役に立つものを見つけた場合に備えて、ここにコードを公開しました。プロキシ モデルが受け入れられ、すべてのセルの背景が緑色になります。

于 2013-07-24T10:15:52.327 に答える