Creating QActions on the fly for history
-
I meant "Recent File" menu like you have in e.g. Qt Creator
@
void MyClass::mySlot()
{
QObject *senderObject = sender();
// rest of your code
}
@ -
Have a look at the "Recent File" example in Qt's documentation it shows a variation of the technique nicely
-
I checked out the 'Recent File' example, and it is really helpful! I have a small problem though that I don't know how to fix.
Here is my code thus far:
@void browseTab::addToHistory()
{
QString url = webView->url().toString();QString historyEntry = url; QString title = webView->title(); QIcon icon = webView->icon(); int numRecentHistory = 1; for (int i = 0; i < numRecentHistory; ++i) { QString text = tr("&%1").arg(title); historyAction = new QAction(this); historyAction->setText(text); historyAction->setData(historyEntry); historyAction->setIcon(webView->icon()); historyAction->setIconVisibleInMenu(true); HistoryMenu->addAction(historyAction); connect(historyAction, SIGNAL(triggered()), SLOT(goToHistoryURL())); }
}
void browseTab::goToHistoryURL()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action)
loadHistory(action->data().toString());
}void browseTab::loadHistory(const QString &name)
{
webView->setUrl(QUrl(QString(name)));
}
@When my webView finishes loading a URL, it calls addToHistory() which adds a new QAction. When this QAction is triggered, it calls goToHistoryURL(). goToHistoryURL() in turn calls loadHistory() which sets the webView to the URL enclosed in the QActions data() property. When I run the program, it runs great until I click one of the historyActions to go to that page. My entire application freezes up and crashes. How can I make it just go to the URL without crashing?
Thanks for your help, I know these are n00bie problems, but I appreciate your help nonetheless!
-
You are probably creating a loop
Why are you creating numRecentHistory actions each time you call addToHistory ?
-
Like I said, follow the Recent File Example, it shows how to handle that
-
You're code doesn't reflect the example, you are creating each time numRecentHistory actions.
The best way to see where the problem lies is to run your application through the debugger
-
As in use the button with a little bug on it with a debug build of your application
-
Okay now if I click on one one of the historyActions, nothing happens. It doesn't load the page, crash, or anything.
Code:
@void browseTab::addToHistory()
{
QString url = webView->url().toString();QString historyEntry = url; QString title = webView->title(); QIcon icon = webView->icon(); int numRecentHistory = 1; for (int i = 0; i < numRecentHistory; ++i) { QString text = tr("&%1").arg(title); historyAction = new QAction(this); historyAction->setText(text); historyAction->setData(historyEntry); historyAction->setIcon(webView->icon()); historyAction->setIconVisibleInMenu(true); HistoryMenu->addAction(historyAction); connect(historyAction, SIGNAL(triggered()), SLOT(goToHistoryURL())); }
}
//determines which historyAction has been clicked, calls loadHistory().
void browseTab::goToHistoryURL()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action)
loadHistory(action->data().toString());
}//sets the webView to the historyAction's url, called by goToHistoryURL().
void browseTab::loadHistory(const QString &name)
{
webView->setUrl(QUrl(QString(name)));
}
@