Singal mit Slot über einen konstanten parameter verbinden

Verschiedenes zu Qt
Antworten
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Singal mit Slot über einen konstanten parameter verbinden

Beitrag 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)));

Code: Alles auswählen

setRenderMode(int p_Value)
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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Da gibt es nichts zu raten. Das wurde schon so oft hier durchgekaut, steht sogar in der FAQ, oder?
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Oder den QSignalMapper verwenden...
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag 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)));
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

@upsala
ist die Lösung correct?
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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;  
        }
    }
    }
}


.........................
speack português italiano deutsch english castellà qt
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ja, warum? Funktionierts etwa nicht?
Antworten