Seite 1 von 1
Singal mit Slot über einen konstanten parameter verbinden
Verfasst: 11. Mai 2007 14:42
von Nash
ich möchte eine Aktion mir einer eigenen Funktion verbinden, und dabei gleich einen konstanten Parameter übergeben.
Code: Alles auswählen
connect(m_WireFrameAct, SIGNAL(triggered()), this, SLOT(setRenderMode(1)));
leider springt die aktion leider nicht in meinen slot, nur wenn ich die setRenderMode ohne Parameter schreibe und auch ohne Paramter verbinde springt er in die funktion.
weiß jemand rat?
Verfasst: 11. Mai 2007 15:28
von macman
Da gibt es nichts zu raten. Das wurde schon so oft hier durchgekaut, steht sogar in der FAQ, oder?
Verfasst: 11. Mai 2007 15:51
von Nash
hab nichts gefunden, im FAQ des Forums steht auch nichts
edit:
hab gerade hier gelesen das sowas nicht geht
http://lists.trolltech.com/qt-interest/ ... 097-0.html
man kann anscheinen auch keine signale ohne Parameter mit slots die parameter haben verbinden.
das sind also die grenzen von Qt.
Dann muss ich halt meherere Funktionen schreiben.
Verfasst: 11. Mai 2007 20:15
von upsala
Oder den QSignalMapper verwenden...
Verfasst: 14. Mai 2007 14:22
von Nash
upsala hat geschrieben:Oder den QSignalMapper verwenden...
exakt.
Damit geht es.
hier der code dafür, falls jemand das Problem nochmal hat.
Code: Alles auswählen
m_signalMapper = new QSignalMapper(this);
m_SolidAct = new QAction(tr("Solid"), this);
m_SolidAct->setShortcut(tr("Ctrl+P"));
m_SolidAct->setStatusTip(tr("Solid Mode"));
m_SolidAct->setToolTip(tr("Solid"));
connect(m_SolidAct, SIGNAL(triggered()), m_signalMapper, SLOT(map()));
m_signalMapper->setMapping(m_SolidAct, 0);
connect(m_signalMapper, SIGNAL(mapped(int)),
this, SLOT(setRenderMode(int)));
Verfasst: 15. Mai 2007 09:55
von Nash
@upsala
ist die Lösung correct?
Verfasst: 15. Mai 2007 10:53
von patrik08
mit einer Container class und QList kann man viele parameter verbinden...
QList<Containerclass *> itecats;
die Containerclass fuellen appenden zu QList
qlist for
und verbinden mit itecats[x]
das beispiel hier ist eine unlimitierte category im tree wie beispiel von
http://www.klempert.de/nested_sets/demo/ und jede kategory hat ueber 33 attribute zu editieren...
Code: Alles auswählen
#define TREETABLE "PCMS_CAT"
#define TREEQUERY "SELECT n.*, round((n.rgt-n.lft-1)/2,0) AS childs, count(*)+(n.lft>1) AS level, ((min(p.rgt)-n.rgt-(n.lft>1))/2) > 0 AS lower, (( (n.lft-max(p.lft)>1) )) AS upper FROM PCMS_CAT n, PCMS_CAT p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.root_id = n.root_id) AND (p.id != n.id OR n.lft = 1) GROUP BY n.root_id,n.id ORDER BY n.root_id,n.lft"
sql tree query
QList<CateAttribute *> itecats;
itecats.clear();
/* liste laden mit parameter */
while (query.next()) {
QString strilevel = query.value(7).toString();
QString name = query.value(2).toString();
QString dbid = query.value(0).toString();
QString axtt = query.value(5).toString();
int xlevel = direct_int(strilevel);
int dbdid = direct_int(dbid);
int moveup = direct_int(query.value(9).toString());
int movedown = direct_int(query.value(8).toString());
int childer = direct_int(query.value(6).toString());
CateAttribute *xml = new CateAttribute(axtt,name,langs);
connect(xml, SIGNAL(PLoad()), this , SLOT(Reload()));
itecats.append(xml);
/* liste laden mit parameter */
/* die container class der parameter */
class CateAttribute : public QObject
{
Q_OBJECT
//
public:
/* parameter eingang */
CateAttribute( QString cosa , QString Name , QStringList languages )
...... xml dom attribute
void Panel::contextMenuEvent( QContextMenuEvent *event )
{
QTreeWidgetItem *niro = cate->currentItem();
if (niro) {
const QString YourTextIs = niro->text(0);
int dbident = direct_int(niro->text(2));
actualdbid = dbident;
for ( int x = 0; x < itecats.size(); ++x ) {
int remoteNR = direct_int(itecats[x]->GetTag("dbnummer"));
if (remoteNR == actualdbid) {
/* foundit item on class start */
int childer = direct_int(itecats[x]->GetTag("child"));
int level = direct_int(itecats[x]->GetTag("level"));
int enups = direct_int(itecats[x]->GetTag("goup"));
QMenu *NiagaraContext = new QMenu(this);
NiagaraContext->addAction(QIcon(":/img/info.png"),tr( "Edit Attribute " ), itecats[x] , SLOT( EditAttributes() ) );
if (enups == 1) {
NiagaraContext->addAction(QIcon(":/img/File_up.png"),tr( "Move up " ), this , SLOT( ActualGoUp() ) );
}
NiagaraContext->exec( QCursor::pos() );
/* foundit item on class stop */
return;
}
}
}
}
Verfasst: 15. Mai 2007 12:26
von upsala
Ja, warum? Funktionierts etwa nicht?