Frage

Ich versuche derzeit, ein Projekt mit QT4 und C ++ abzuschließen. Ich verwende Schaltflächen, um zwischen den Zuständen zu wechseln. Während ich versuchte, die Signale der Schaltflächen der Schaltflächen an die SMSEDit anzuschließen, um den entsprechenden Zustand anzuzeigen, war ich bei einem Fehler festgefahren:

Object :: Connect No solchen Slot qtextedit :: append ("State") Object :: Connect No solche Slot Qtextedit :: append ("Linkstatus")

Nur Qtextedit hat definitiv einen Append (QString) -Slot.

Irgendwelche Ideen?

Einige Code -Beispiele:

QPushButton *move = new QPushButton("Move");
connect(move, SIGNAL(clicked()), textEdit, SLOT(append("move state")));
War es hilfreich?

Lösung

Sie können kein Argument (im wahrsten Sinne des Wortes) an den Slot des append () übergeben, wenn Sie ein Signal zur Slot -Verbindung herstellen.

Sie verweisen darauf wie eine Methodesignatur:

SLOT(append(QString)) //or const QString, I'm not sure

Wenn Sie das Textfeld benötigen, um die Wörter "Status" jedes Mal, wenn die Schaltfläche zu klicken, anhängen, sollten Sie Ihren eigenen Steckplatz definieren, der den Anhang ausführt.

Andere Tipps

Chris hat es auf den Punkt gebracht.

Das ist einer der vielen Gründe, warum ich Boost :: Signale viel mehr signalisiert (Sie dürfen Boost :: Bind verwenden). Sie müssen im Grunde eine andere Funktion erstellen, die das Signal erfasst und dann den Anhang ausführt.

...

QPushButton *move = new QPushButton("Move");
connect(move, SIGNAL(clicked()), textEdit, SLOT(MoveState()));
}

...

void MyTextEdit::MoveState()
{
    append("move state");
}

Verwenden ein QSignalMapper Ein hartcodiertes Argument an den Slot des Textbearbeitungsseitens übergeben.

Beispiel:

QSignalMapper* signalMapper = new QSignalMapper(this);
QPushButton* move = new QPushButton("Move");
signalMapper->setMapping(move, QString("move state"));
connect(move, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(signalMapper, SIGNAL(mapped(QString)), textEdit, SLOT(append(QString)));

Achten Sie auf die Fehler im obigen Code.

Angenommen, Sie werden andere haben QPushButtons, das dazu führt, dass andere Staaten auftreten, können Sie sie in a stecken QButtonGroup. Dann können Sie eine Aufzählung verwenden, wie z. { MOVE_ID, STOP_ID, ... } sich auf die möglichen Zustände beziehen.

QPushButton* move = new QPushButton( "Move" ) ;
QPushButton* stop = new QPushButton( "Stop" ) ;
QButtonGroup* buttonGroup = new QButtonGroup() ;
buttonGroup->addButton( move, MOVE_ID ) ;
buttonGroup->addButton( stop, STOP_ID ) ;

// Connecting QButtonGroup to writing function
connect( buttonGroup, SIGNAL( buttonClicked( int ) ),
         textEdit, SLOT( append( int ) ) ) ;

Im textEdit, Sie definieren eine Funktion, die den entsprechenden Text je nach Zustand, in dem Sie erhalten, angehängt.

void append( int i )
{
   switch ( i )
   {
      case MOVE_ID:
         textEdit->append( "move state" ) ;
         break ;
      case STOP_ID:
         textEdit->append( "stop state" ) ;
         break ;
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top