Qt 从另一个更改标签文本 class
Qt Change label text from another class
我正在尝试使用 Qt 通过 Class B 更改 Class A 的标签文本,但我无法让它工作,这是我的代码:
Class答:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "loldata.h"
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
LoLData *lold = new LoLData();
QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(updateData()));
QObject::connect(lold, SIGNAL(updatePlayerID(QString)), ui->label, SLOT(setText(QString)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::updateData()
{
LoLData summoner;
summoner.getSummonerData("Snylerr");
}
Class答:(.h)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QObject>
#include <string>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void updateData();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Class乙:
#include "loldata.h"
#include "mainwindow.h"
using namespace std;
int LoLData::getSummonerData(QString playerName)
{
emit updatePlayerID("playerName");
return 0;
}
Class B: (.h)
#ifndef DEF_LOLDATA
#define DEF_LOLDATA
#include <QApplication>
#include <QObject>
#include <string>
class LoLData : public QObject
{
Q_OBJECT
public:
int getSummonerData(QString playerName);
signals:
void updatePlayerID(QString playerName);
private:
};
#endif
你可以看到我尝试使用插槽和信号,但标签的文本没有改变,我在网上看到了很多例子,但我无法让它们工作
感谢您的回复。
您正在此处创建 LoLData
的新实例:
void MainWindow::updateData()
{
LoLData summoner;
summoner.getSummonerData("Snylerr");
}
这个名为 summoner
的 LoLData
实例没有连接到您标签的 setText
插槽。
LoLData *lold = new LoLData();
- LolData
的这个实例连接到标签的 setText
插槽。
你应该怎么办?
这取决于你想要完成什么:
通过插入 QObject::connect(&summoner...) inside your
updateData` 方法将您的 summoner
实例连接到标签;
或者您没有实例化新的 LolData
变量并在 updateData
函数中使用 lold
:
void MainWindow::updateData()
{
lold->getSummonerData("Snylerr");
}
同样在这种情况下,您必须将 lold
作为成员变量。
在您的 MainWindow 构造函数中,您将 lod 对象连接到 setText 插槽。
但是在 updateData 中,您使用了另一个未连接到任何对象的对象(召唤器)。因此,当您在召唤师上使用 getSummonerData 时,信号 updatePlayerID 会发出,但它们没有连接到它。
我正在尝试使用 Qt 通过 Class B 更改 Class A 的标签文本,但我无法让它工作,这是我的代码:
Class答:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "loldata.h"
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
LoLData *lold = new LoLData();
QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(updateData()));
QObject::connect(lold, SIGNAL(updatePlayerID(QString)), ui->label, SLOT(setText(QString)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::updateData()
{
LoLData summoner;
summoner.getSummonerData("Snylerr");
}
Class答:(.h)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QObject>
#include <string>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void updateData();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Class乙:
#include "loldata.h"
#include "mainwindow.h"
using namespace std;
int LoLData::getSummonerData(QString playerName)
{
emit updatePlayerID("playerName");
return 0;
}
Class B: (.h)
#ifndef DEF_LOLDATA
#define DEF_LOLDATA
#include <QApplication>
#include <QObject>
#include <string>
class LoLData : public QObject
{
Q_OBJECT
public:
int getSummonerData(QString playerName);
signals:
void updatePlayerID(QString playerName);
private:
};
#endif
你可以看到我尝试使用插槽和信号,但标签的文本没有改变,我在网上看到了很多例子,但我无法让它们工作 感谢您的回复。
您正在此处创建 LoLData
的新实例:
void MainWindow::updateData()
{
LoLData summoner;
summoner.getSummonerData("Snylerr");
}
这个名为 summoner
的 LoLData
实例没有连接到您标签的 setText
插槽。
LoLData *lold = new LoLData();
- LolData
的这个实例连接到标签的 setText
插槽。
你应该怎么办? 这取决于你想要完成什么:
通过插入
QObject::connect(&summoner...) inside your
updateData` 方法将您的summoner
实例连接到标签;或者您没有实例化新的
LolData
变量并在updateData
函数中使用lold
:void MainWindow::updateData() { lold->getSummonerData("Snylerr"); }
同样在这种情况下,您必须将 lold
作为成员变量。
在您的 MainWindow 构造函数中,您将 lod 对象连接到 setText 插槽。
但是在 updateData 中,您使用了另一个未连接到任何对象的对象(召唤器)。因此,当您在召唤师上使用 getSummonerData 时,信号 updatePlayerID 会发出,但它们没有连接到它。