Ich habe ein QTimer-Objekt, das jede Sekunde eine Funktion startet. Der Timer läuft richtig, wenn ich den folgendenQTimer startet nicht beim Übergeben einer Variablen
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
// Set a Qtimer to update the OSD display every 1 second
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(print()));
timer->start(1000);
}
void MainWindow::print()
{
printf("hello world\n");
}
Aber ich möchte eine Variable Druck() übergeben. Aber wenn ich das tue, sehe ich nie meine Druckanweisung.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
// Set a Qtimer to update the OSD display every 1 second
QTimer *timer = new QTimer(this);
int val = 42;
// Now pass val to print()
connect(timer, SIGNAL(timeout()), this, SLOT(print(val)));
timer->start(1000);
}
void MainWindow::print(int val)
{
// I never see my print statement
printf("hello world, val=%d\n", val);
}
header.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void print(int val);
Warum funktioniert das nicht? Was kann ich tun, um eine Variable in print() mit QTimer?
Danke für die schnelle Antwort. Ich dachte mir, dass es etwas mit der Signatur zu tun hat, aber ich habe die Fehlermeldung bis jetzt nicht bemerkt. Ich werde dies als korrekt bezeichnen, sobald SO es mir erlaubt. –
Um diese Antwort zu erweitern, gibt es eine Klasse namens QSignalMapper, mit der Sie einfache Zuordnungen zwischen Objekten für diesen Zweck erstellen können (d. H., Wenn ein Signal ohne Parameter ausgegeben wird). – aatwo