Congratulations to our 2022 Qt Champions!

[Solved] Advice needed: Reload page on "F5"

  • [ It should be easy to solve, but I found no good starting point. ]

    A reload in my application (i.e. a QWebView that loads a html page) already works because I can right-click on a page and select 'Reload'. This seems to be enabled by default, I did not have to do anything to enable this.

    What do I have to do, to achieve a reload by just pressing F5 as we know it from standard browsers? A hint to lead me into the right direction should be enough.

    Thanks in advance!

  • If you are reimplementing the web view, you can handle keyPressEvents, and catch F5. If not, you could use an event filter.

  • I would try to add a [[doc:QAction]] together with a shortcut to the webview. You don't need to subclass for this approach, just set the webview as the parent of the action.

  • @QKeySequence keys_refresh(Qt::Key_F5);
    this->action_refresh = new QAction(this->view);
    connect(this->action_refresh, SIGNAL(triggered()),this->view,SLOT(reload()));

  • Better would be to use

    QKeySequence keys_refresh(QKeySequence::Refresh);

    This way you get the key sequence the user expects on his platform.

  • Topic subject is : Reload page on “F5” ;)

  • But I think QKeySequence::Refresh & Qt::Key_F5 are synonyms, at least for X11 & WIN platforms. isn't they?

  • Yes, they are. And if you're only on platforms that use F5, it makes no difference for you. But why use something hardcoded, when there's a general solution.

    And if someone is not aware of the standard key sequences, how should that be reflected in the topic title?

  • Thanks so far!
    Unfortunately it's not working. Can you see what's wrong? For ease of use, I put the code in the main.cpp, which I will not do in the end, but right now it makes it easier to trace my mistake...

    //extract from main.cpp:
    QApplication app(argc, argv);
    QWebView window;
    //[ ... some connects on window->page() and window->page()->mainFrame() ...]
    QKeySequence keys_refresh(QKeySequence::Refresh); //or (Qt::Key_F5), doesn't matter
    QAction* actionReload = new QAction(&window);
    QObject::connect(actionReload, SIGNAL(triggered()), &window, SLOT(reload()));


    If I make right-click -> reload on my html page, the page gets reloaded, but not if I press F5.
    [Edit: Even if I make s subclass and override the reload() slot, I see that the slot is not called. So either the action is not triggered, or the signal-slot connection is wrong]

  • you have forget to add action to WebView:


  • [quote author="AcerExtensa" date="1335439172"]you have forget to add action to WebView:


    Great, I was just wondering what kind of black magic binds the action to the window :-) Okay, that's it. Thank you all (also thanks for the first answer, maybe I will also have to use the keyPressEvent() override for some other stuff, but for the reload it's easier to use QActions.)

  • Moderators

    If nothing changed during my lengthy absence from this forum, you should now change the topic's title/ subject to include "[Solved]" at the beginning. I've also tagged it for you.

Log in to reply