2

私のプロジェクトは、Qt 5.1.1 (MSVC 2010、32 ビット) に基づく QT Creator 2.8.1 にあり、キット: QT 5.1.1 MSVC2010 32 ビットでコンパイルされています。

問題は、Win 7 (x64) または Win 8 で webview が奇妙な動作を示すことです。最初のチェックボックスに常にフォーカスがあります。最初のチェックボックスにカーソルを合わせると、2 番目のチェックボックスが「強調表示」されます。また、最初のチェックボックスをオンにできません。クリックすると、2番目のチェックボックスがオンになり、最初のチェックボックスはオフのままになります。

Win XP で同じ exe を実行したり、Linux または Mac 用に再コンパイルしたプロジェクトではエラーは発生しません。

ここに画像の説明を入力

HTML:

<p><input id="loginA" tabindex="3" type="checkbox" name="a" /> Test 1<br/></p> <p><input id="loginB" tabindex="4" type="checkbox" name="b" /> Test 2<br/></p>

C++/QT5 の QWebview 部分:

QVariant result = this->webv->page()->mainFrame()->evaluateJavaScript(jscontent);

Web インスペクターのコンソールを介して checked 属性を設定すると、説明と同じ動作を示し、2 番目の属性のみがチェックされます。

$(":checkbox").attr("checked", true) [<input id=​"loginA" tabindex=​"3" type=​"checkbox" name=​"a" checked=​"checked">​, <input id=​"loginB" tabindex=​"4" type=​"checkbox" name=​"b" checked=​"checked">​]

助言がありますか??助けていただければ幸いです。

4

1 に答える 1

2

完全な回避策は次のとおりです。

QProxyStyle を拡張する CustomStyle クラスを作成します。

#ifndef CUSTOMSTYLE_H
#define CUSTOMSTYLE_H

#include <QProxyStyle>
#include <QStyleOption>

class CustomStyle : public QProxyStyle
{
    void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = 0) const
    {
        if (element == QStyle::CE_CheckBox || 
            element == QStyle::CE_RadioButton) {
            option->styleObject->setProperty("_q_no_animation", true);                          
        }
        QProxyStyle::drawControl(element, option, painter, widget);
    }
};

#endif //CUSTOMSTYLE_H

CustomStyle をアプリケーションまたは webview コンポーネントに設定します。

// like this
QApplication::setStyle(new CustomStyle());

// or like this
ui->webview->setStyle(new CustomStyle());

QWebView コンポーネントに「styleSheet」プロパティを設定してはならないことに注意してください。空である必要があります。そうしないと、何らかの形でカスタム スタイルがオーバーライドされ、回避策が機能しなくなります。

于 2013-12-20T14:31:05.737 に答える