1

QLabelのウィジェットクラス「BlockWidget」サブクラスがあり、コンストラクターでqss qss_1を設定し、マウスを移動すると背景色が変わるアニメーション効果が必要なので、qssqss_2を設定しますがそれは機能していないようです...私のコードは次のようになります:

BlockWidget::BlockWidget(const QString &objname)
{
    this->setObjectName(objname);
    setAlignment(Qt::AlignCenter);
    setStyleSheet(tr("BlockWidget#%1{color:white; background-color: gray; font-size:18px;"
                 "font-family:'Consolas';}").arg(objectName()));
}

void BlockWidget::mouseMoveEvent(QMouseEvent *ev)
{
    setStyleSheet(tr("BlockWidget#%1{color:white; background-color: blue; font-size:18px;"
                 "font-family:'Consolas';}").arg(objectName()));
    repaint();
}

メインウィンドウがあり、BlockWidgetの81個のインスタンスをインスタンス化しました。マウスをそのうちの1つに移動しても、何も起こりませんでした。しかし、何度かクリックすると、qssスタイルが変更されます(背景が青に変わります)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

4

2 に答える 2

1

ドキュメントに記載されているように、マウスの移動イベントは、ウィジェットでマウストラッキングが有効になっていない場合、ボタンをクリック、ドラッグ、または離したときにのみ送信されます。

クラス内でQWidget::enterEvent再定義することにより、ラベルに出入りするマウスを検出できます。QWidget::leaveEventBlockWidget

または:hover、マウス関連の関数を再定義することなく、QSS疑似状態を使用することもできます。

setStyleSheet("BlockWidget {"
              "    color:white;"
              "    background-color: gray;" 
              "    font-size:18px;"
              "    font-family:'Consolas';"
              "}"
              "BlockWidget:hover {"
              "    background-color: blue;" 
              "}");

PS:

  • Qtスタイルシートのドキュメントによると、は疑似状態をQLabelサポートしていませんが、背景や境界線を変更することは問題なく機能しているようです。:hover

  • BlockWidgetウィジェットには子がなく、スタイルシートをすべてのウィジェットBlockWidgetに個別に設定するため、QSSセレクターからオブジェクト名を省略しても安全です。

于 2012-06-25T10:34:48.423 に答える
1

ウィジェットのマウストラッキングを有効にする必要がありますhttp://qt-project.org/doc/qt-4.8/qwidget.html#mouseTracking-prop

于 2012-06-25T10:05:05.753 に答える