Qt将数据从父级发送到子级小部件

时间:2019-02-04 10:17:15

标签: qt widget signals-slots

我有2个从 QDialog 继承的小部件。其中一个小部件被另一个小部件调用。

我需要将数据从父窗口小部件传递给子窗口。例如,我要传递QStringList。

我可以在这两个类中制作信号和插槽。父小部件类的插槽-transferList(QStringList)-填充我的QStringList。

如何连接信号和插槽?子控件当然对父控件一无所知。

// .h-file of parent widget. 
class ElectricIndicationDialog : public QDialog {

#include "PollIndication.h" // class of child widget
QSharedPointer <PollIndication> pollInd;

public slots:
    void transferList(QStringList);
signals:
    void listTfansfer(QStringList);
private:
    QStringList sendList;
};


// .cpp-file of parent widget
pollInd = QSharedPointer <PollIndication>(new PollIndication());
pollInd->show();

void ConfIndication::transferList(QStringList lst) {
    lst.append("str1");
    lst.append("str2");
}


// .h-file of child widget
class PollIndication : public QDialog {
public slots:
    void getList(QStringList);
signals:
    void listGet(QStringList);
private:
    QStringList recList; // We transfer data to it
}

2 个答案:

答案 0 :(得分:0)

您不需要一个信号/插槽:您的父母知道孩子的类型并在上面有一个指针。因此,当您需要将数据发送到对话框时,可以调用PollIndication方法。

void ConfIndication::transferList(QStringList lst) {
    lst.append("str1");
    lst.append("str2");
    pollInd->changeTransferList(lst);
}

如果对话框是模式对话框,则也可以仅在需要时创建对话框,并将列表作为构造函数的参数。

void ConfIndication::transferList(QStringList lst) {
    lst.append("str1");
    lst.append("str2");
    PollIndication* pollInd = new PollIndication(lst, this);
    pollInd->exec();
}

答案 1 :(得分:0)

让一个家长班知道他们的孩子通常是一个坏主意。

您可以在父类中定义一个抽象方法(考虑一些纯虚拟方法),因此每个子类都必须实现该方法...之后,父类可以调用该方法,并且子类将根据以下信息实现登录它必须如何反应...