[gelöst] [Qt4] mehrere QActions mit einem Slot verbinden
Verfasst: 22. September 2005 09:48
Moin,
ich versuche gerade einer Applikation im Filemenü die zuletzt genutzten Dateien hinzuzufügen. Mit Qt3 war das einfach, bei Qt4 gibt es ein Problem. Die einzelnen Menüpunkte bestehen aus QActions und ich kann sie auch einem Slot zuweisen, nur, wie stelle ich im Slot fest, von welchem QAction das jetzt getriggert wurde? Hier mal ein Stückchen Code:
Zuerst das Menü jedesmal neu aufbauen:
Das funktioniert problemlos, es wird auch der folgende Slot aufgerufen:
action ist immer NULL. Hab ich was vergessen, übersehen? Den Support von Trolltech habe ich inzwischen angeschrieben, aber das dauert manchmal bis die antworten und es drängt etwas.
Wenn ich Antwort habe, werde ich es auf jeden Fall hier kundtun, denn IMHO funktioniert hier was nicht oder es fehlt was.
ich versuche gerade einer Applikation im Filemenü die zuletzt genutzten Dateien hinzuzufügen. Mit Qt3 war das einfach, bei Qt4 gibt es ein Problem. Die einzelnen Menüpunkte bestehen aus QActions und ich kann sie auch einem Slot zuweisen, nur, wie stelle ich im Slot fest, von welchem QAction das jetzt getriggert wurde? Hier mal ein Stückchen Code:
Zuerst das Menü jedesmal neu aufbauen:
Code: Alles auswählen
//////////////////////////////////////////////////////////////////////////
// Menu with recent files
void MainWindow::updateFileMenu()
{
fileMenu->clear();
fileMenu->addAction(newFileAction);
...
...
if (m_slRecentFiles.count()>0)
{
fileMenu->addSeparator();
for ( int i=0; i<m_slRecentFiles.count(); ++i )
{
if (recentFileAction[i]!=NULL)
delete recentFileAction[i];
recentFileAction[i] = new QAction(QString("&%1 " + m_slRecentFiles[i]).arg(i), this);
connect(recentFileAction[i], SIGNAL(triggered()), this, SLOT(OnOpenRecentFile()));
fileMenu->addAction(recentFileAction[i]);
}
}
}
Code: Alles auswählen
//////////////////////////////////////////////////////////////////////////
// Call of one of the recent files
void MainWindow::OnOpenRecentFile()
{
QAction* action = fileMenu->activeAction();
if (action==NULL)
return;
// do what to do
}
Wenn ich Antwort habe, werde ich es auf jeden Fall hier kundtun, denn IMHO funktioniert hier was nicht oder es fehlt was.