LoginSignup
3
2

More than 5 years have passed since last update.

go-qmlのWebViewでローカルWebサイトを表示するときの注意

Last updated at Posted at 2015-07-19

分かってしまえば簡単だけど、まるまる一週間はまってしまったのでメモ(訂正あり)。

go言語にgo-qmlとQt5でWebView画面を持つGUIを作り、さらに自分自身をmartiniでWebサーバーにして自分自身をリッスンさせようとしていた。

条件:
- Mac OS X Yosemite
- Qt: 5.5
- Go: 1.4.2
- martiniとgo-qmlをgo getでインストール

qml、テンプレート、メインのgoを以下のような感じで書いた。

qml/main.qml
import QtQuick 2.4
import QtQuick.Window 2.2
import QtWebKit 3.0

Window {
    property int win_width: 1280
    property int win_height: 800

    visible: true
    width:  win_width
    height: win_height

    WebView {
      id: resultwebview
      anchors.fill: parent
      url: "http://localhost:3000/"
  }
}
template/hello.tmpl
<h2>Hello {{.}}!</h2>
main.go
package main

import (
    "fmt"
    "os"

    "github.com/go-martini/martini"
    "github.com/martini-contrib/render"
    "gopkg.in/qml.v1"
)

const (
    QMLPATH = "qml/main.qml"
)

func main() {
    m := martini.Classic()
    // render html templates from templates directory
    m.Use(render.Renderer())

    m.Get("/", func(r render.Render) {
        r.HTML(200, "hello", "jeremy")
    })

    go m.Run()

    if err := qml.Run(run); err != nil {
        fmt.Fprintf(os.Stderr, "error: %v\n", err)
        os.Exit(1)
    }
}

// Runs QML GUI.
func run() error {
    engine := qml.NewEngine()

    controls, err := engine.LoadFile(QMLPATH)
    if err != nil {
        return err
    }

    // Shows default messages.

    window := controls.CreateWindow(nil)
    window.Show()

    window.Wait()
    return nil
}

go run main.goすると、一応期待どおりに動いたものの、Web-Starter-Toolkitを入れてから挙動がおかしくなった。一度表示したWeb-Starter-Toolkitのデモ画面とCSSが固定されてしまい、cssやhtmlを試しに削除してもデモ画面がずっと表示され続けてしまう。

明らかに存在しないはずのhtmlやcssが取得される様子は、ちょっとしたホラーだった。どこのキャッシュだかゴミ捨て場だかを参照していたのかは結局わからず。

数日かけてQtからmartiniまでひたすら調べたところ、Web-Starter-Toolkitのせいではなく、QMLのurl: "http://localhost:3000"でおかしなところからWeb画面を取得しているっぽかった。

もしやと思ってこの箇所をurl: "http://127.0.0.1:3000"に変えると、あっさり正常に復帰した。理由は不明だけど、ここにはlocalhostを指定すべきではないらしい。もともとそんな利用法は想定していないと思うので仕方ないとは思うけど。

こんなことに一週間もかかるとは...いずれにしろ、これでやっとWeb-Starter-Toolkitを本格的に楽しめそう。

訂正

その後しばらくしてまた同じ現象が起きた。結局、URLを変えるとその場は解消することがわかった。アドレスやポートのどこかを変えればよいが、ポートを変えるのが楽。

おそらく、レンダリングエンジン(たぶんChromeのやつ)でCSSキャッシュがなにかのはずみで更新されなくなるのだろう。Railsのアセットパイプラインみたいにcssファイル名にハッシュを含められるかどうか調べてみるつもり。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2