Ich bin Neuling im GUI-Design. Hier, beim Senden und Empfangen von Nachrichten (Float, Integer-Werte) mit DDS (OpenSplice) versuche ich, einen PushButton zu meinen bereits vorhandenen Labels hinzuzufügen (mit einigen Float-Werten wie unten gezeigt), so dass nach einem Klick auf den PushButton, I sollte in der Lage sein, Daten in meinem Etikett zu sehen. Ich habe versucht, einen Push-Button mit Hilfe von Qt Network Sender Beispiel. Jetzt bekomme ich den Fehler undefinierten Verweis auf 'MainWindow :: on_pushButton_clicked() in der Datei moc_mainwindow.cpp beim Erstellen des Projekts.Möchten Taste hinzufügen, um setTimer und setText
fastsender.cpp
FastSender::FastSender(QLabel *x, QObject *parent) : QObject(parent)
{
wSend = x;
dataTimer = new QTimer(this);
emergency = new QPushButton(tr("Emergency"));
buttonBox = new QDialogButtonBox;
buttonBox->addButton(emergency,QDialogButtonBox::ActionRole);
connect(emergency, SIGNAL(clicked()), this, SLOT(startsending()));
connect(dataTimer, SIGNAL(timeout()), this, SLOT(walk()));
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(buttonBox);
}
void FastSender::startsending()
{
emergency->setEnabled(false);
dataTimer->start(100); // Interval 0 means to refresh as fast as possible
}
int FastSender::walk()
{
msg->value= i+0.1;
snprintf (buf, MAX_MSG_LEN, "Message no. %d", i);
cout << "Writing message: \"" << msg->value << "\"" << endl;
status = talker->write(*msg, userHandle);
QString s= QString::number(msg->value, 'f',8);
wSend->setText(s);
}
fastsender.h
class FastSender : public QObject
{
Q_OBJECT
public:
explicit FastSender(QObject *parent = 0);
FastSender(QLabel *x, QObject *parent = 0);
~FastSender();
signals:
private:
QTimer* dataTimer;
QLabel *wSend;
DDS::DomainParticipantFactory_var dpf;
DDS::DomainParticipant_var parentDP;
DDS::Topic_var signalTopic;
DDS::DataReader_var parentReader;
DDS::DataWriter_var parentWriter;
fw::signalSeq_var msgSeq;
char * signalTypeName;
fw::signalDataWriter_var talker;
fw::signal *msg;
DDS::InstanceHandle_t userHandle;
DDS::Publisher_var fwPublisher;
int alpa;
QPushButton *emergency;
QDialogButtonBox *buttonBox;
public slots:
int walk();
int hello();
void startsending();
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
fwdds = new FastWanDDS(ui->label);//receiving values are displayed in label
fwdds1 = new FastSender(ui->label_2);//Sending values are displayed in label_2
}
mainwindow.h
Ui::MainWindow *ui;
QTimer* timer;
int counter;
FastWanDDS *fwdds;
FastSender *fwdds1;
jede Hilfe dankbar.
Hinweis: Nur Schnipsel des Codes präsentiert
Ich verstehe nicht, was Ihre Frage ist. Wird der Text in QLabel nicht angezeigt? Hinweis: 'repaint()' wird einmal aufgerufen, nachdem der MainWindow-Konstruktor zurückgegeben wurde. Dies ist höchstwahrscheinlich bevor 'walk()' aufgerufen wird. Also ich vermute für ein Update-Problem. Versuchen Sie einfach, die Größe Ihrer App zu ändern und sie zu verschieben, um zu sehen, ob der Repaint den neuen Wert darstellt. (Wenn ja, können Sie 'wSend-> update()' verwenden, um Label in 'walk()' zu aktualisieren) –
@BernhardHeinrich Text wird angezeigt, wenn ich die ausführbare Datei ausführe. Jetzt möchte ich das Fenster öffnen und auf meinen Klick auf den Druckknopf warten, um den Text zu setzen. Ich möchte nach allem eine Taste hinzufügen –
Bitte lassen Sie mich wissen, wenn einige weitere Details zu diesem –