繁体   English   中英

QT 不更新第二个 UI

[英]QT Not Updating Second UI

我有 2 个 UI,我正在尝试从另一个更新一个。 我有类phoneuser_uitest_uiuser_transmitter user_ui是用户可以与之交互的那个,例如如果用户按下 user_ui 的 UI 上的切换按钮,那么状态应该显示在 test_ui 的 UI 上。 user_transmitter 传输输入和输出,这是它唯一的工作,它没有 UI。 电话 class 只包含变量,没有其他内容。


user_ui.h:

#ifndef USER_UI_H
#define USER_UI_H

#include <QMainWindow>
#include <QTimer>

#include <phone.h>
#include "user_transmitter.h"
#include "test_ui.h"

using namespace std;

QT_BEGIN_NAMESPACE
namespace Ui { class user_ui; }
QT_END_NAMESPACE

class user_ui : public QMainWindow
{
    Q_OBJECT

public:
    user_ui(QWidget *parent = nullptr);
    ~user_ui();
    Phone phone;
    QTimer *timer;
private:
    Ui::user_ui *ui;
    user_transmitter user_t;
    void updateUI();
    void connections();
signals:
    void toggeButton(int);
private slots:
    void toggleButton1();
    void update();
};
#endif // USER_UI_H

user_ui.cpp:

#include "user_ui.h"
#include "ui_user_ui.h"

#include <QMessageBox>

user_ui::user_ui(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::user_ui)
{
    ui->setupUi(this);

    update();
    connections();
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));

user_ui::~user_ui()
{
    delete ui;
}

void user_ui::update()
{
    ui->status->setText((phone.status) ? "On" : "Off");
}

void user_ui::connections() {
    QObject::connect(this, &user_ui::toggleButton, &user_t, &user_transmitter::toggleButton);
    connect(ui->button, SIGNAL(released()), this, SLOT(toggleButton1()));
}

void user_ui::toggleButton1() {
    phone.status= !phone.status;
     emit toggleButton(1);
}

user_transmitter.h:

#ifndef USER_TRANSMITTER_H
#define USER_TRANSMITTER_H

#include <vector>
#include "phone.h"
#include "test_ui.h"

class user_transmitter : public QObject
{
    Q_OBJECT
public:
    explicit user_transmitter(QObject *parent = nullptr);
    Phone phones;
public slots:
    void toggleButton(int);
private:
    void setUpSignals();
    test_ui test;
signals:
    void button(int,bool);
};

#endif // USER_TRANSMITTER_H

user_transmitter.cpp:

#include "user_transmitter.h"

user_transmitter::user_transmitter(QObject *parent) : QObject(parent)
{
    setUpSignals();
}

void user_transmitter::setUpSignals(){
   QObject::connect(this, &user_transmitter::button, &test, &test_ui::button);

}

void user_transmitter::button(int index)
{
    phones.status = !phones.status;
    cout << "From transmitter: " << phones.status<< endl;
    emit button(index, phones.status);
}

test_ui.h:

#ifndef TEST_UI_H
#define TEST_UI_H

#include <QWidget>

namespace Ui {
class test_ui;
}

class test_ui : public QWidget
{
    Q_OBJECT

public:
    explicit test_ui(QWidget *parent = nullptr);
    ~test_ui();
    QTimer *timer;
public slots:
    void button(int,bool);

private:
    Ui::test_ui *ui;
signals:
};

#endif // TEST_UI_H

test_ui.cpp:

#include "test_ui.h"
#include "ui_test_ui.h"

test_ui::test_ui(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::test_ui)
{
    ui->setupUi(this);
}

test_ui::~test_ui()
{
    delete ui;
}

void test_ui::button(int index, bool status){
    qDebug() << "From test: " << status;
    ui->status->setText((status) ? "On" : "Off");
}

我的问题是,当我按下 user_ui 的 UI 的切换按钮时,“on”或“off”状态应该显示在用户 UI 和 test_ui 上。 它显示在用户 UI 上,但不显示在 test_ui 上。 变送器中的 qdebug 行和测试 class 打印,但测试的 UI 没有更新,所以我猜测正在调用 function。 所以,我不确定它是否是信号槽问题,因为 qdebug 行正在打印,或者它是否是时间问题。

我通过尝试从 class 中的不同 function 在 QLineEdit 框中打印一些内容来测试我的测试 UI,它可以工作,所以那里没有问题。

我能够通过简单地将来自 2 个类(user_ui 和 user_transmitter)的信号和插槽连接添加到我的 main.cpp 来解决我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM