簡體   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