lineEdit не представляет текст после вызова setText из другого Widget по сигналу - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть один QWidget (keyboardW) и один QDialog (pacsD), которые реализованы отдельно, и оба одновременно открываются / представляются на моем QMainWindow, если я запускаю QPushButton на моем QMainWindow. keyboardW представляет виртуальную клавиатуру, а pacsD содержит некоторое значение QLineEdit's, которое должно быть заполнено, если пользователь что-то пишет на клавиатуре. Я реализовал функциональность как следовать. Проблема: если keyboardW испускает сигнал с QString, слот transmitOutputTextSlot() в классе pacsD получает его с правильным содержимым. Но текст не представлен на lineEdit. Я попробовал функции setFocus() и repaint(). Безуспешно.

КлавиатураW.h

namespace int::Mic::Manager {
class PacsD;
class KeyboardW: public QObject, public Ui::keyboardW
{
    Q_OBJECT
public:    
    KeyboardW(QWidget *parent= 0);
    ~KeyboardW();
    QWidget *getKeyboardW(){ return m_KeyboardW; }
signals:
    void transmitOutputTextSignal(QString);
private slots:
    void setTextSlot();
private:
    PacsD *m_PacsD;
    QPointer<QWidget> m_KeyboardW;
    void init();
    QString m_OutputText;
};
}

КлавиатураW. cpp

namespace int::Mic::Manager {
KeyboardW::KeyboardW(QWidget *parent) : QObject(parent)
{
    m_KeyboardW = QPointer<QWidget>(new QWidget());
    setupUi(m_KeyboardW);
    init();
}
void KeyboardW::init()
{
    m_PacsD = new PacsD;
    connect(this, SIGNAL(transmitOutputTextSignal(QString)), m_PacsD, SLOT(transmitOutputTextSlot(QString)));
}
void KeyboardW::setTextSlot()
{
    // m_OutputText contains what I have written on the virtual keyboard
    emit transmitOutputTextSignal(m_OutputText);
}
}

PacsD.h

#pragma once
namespace int::Mic::Manager {
class PacsD: public QObject, public Ui::pacsD
{
    Q_OBJECT   
public:
    PacsD(QDialog *parent= 0);
    ~PacsD();
    QDialog *getPacsD(){ return m_PacsD; }
public slots:
    void transmitOutputTextSlot(QString);
private:
    QPointer<QDialog> m_PacsD;
};
}

PacsD. cpp

namespace int::Mic::Manager {
PacsD::PacsD(QDialog *parent) : QObject(parent)
{
    m_PacsD = QPointer<QDialog>(new QDialog());
    setupUi(m_PacsD);
}
void PacsD::transmitOutputTextSlot(QString text)
{
    nameLineEdit->setText(text);
    qDebug()<<"nameLineEdit Text: "<<text;

    // The content of the LineEdit is correcly given
    QString getTransmittedText= nameLineEdit->text();
    qDebug()<<"getTransmittedText: "<<getTransmittedText;
}
}

1 Ответ

0 голосов
/ 20 апреля 2020

nameLineEdit-> setText () вообще работает в каком-то другом месте (т.е. в конструкторе)? В файле * .ui уже есть текст для вашей метки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...