c++ GUI如何在第二个窗口中使用一个窗口中的私有数据

C++ GUI how to use private data from one window in the second one

本文关键字:窗口 一个 数据 GUI 第二个 c++      更新时间:2023-10-16

我在Qt有问题。我必须做两个窗口:在第一个你可以点击10个按钮,每个按钮必须在第二个窗口的comboBox中添加一个项目(按钮的名称)。但是我不能引用这个comboBox。我没有任何主意了:(

我试图使变量保护和公共,但它不工作。我已经包括window2.hwindow1,我正试图做这样的事情:

//this is in window1
void window1::on_button1_clicked() { 
    window2::combo->addItem("button1"); 
}

您可以将按钮的点击信号连接到第二个窗口的插槽。此槽将向组合框中添加信息。

要做到这一点,您需要将信号彼此区分开来。最好的方法是使用QSignalMapper

class window1 {
    Q_OBJECT
    ... // your other definitions...
    QSignalMapper* signalMapper;
};
window1::window1 (/*your constructor's parameters*/) {
    signalMapper = new QSignalMapper(this); // Will map each buttons' signals to a signal with a QString parameter.
    // You can do an iteration instead of this if your buttons are on a container.
    signalMapper->setMapping(button1, QString("button1"));
    signalMapper->setMapping(button2, QString("button2"));
    // ...
    signalMapper->setMapping(button10, QString("button10"));
    // Same comment as above applies here.
    connect(button1, SIGNAL(clicked()),
            signalMapper, SLOT(map());
    connect(button2, SIGNAL(clicked()),
            signalMapper, SLOT(map());
    // ...
    connect(button10, SIGNAL(clicked()),
            signalMapper, SLOT(map());
    connect(signalMapper, SIGNAL(mapped(QString)), 
            window2, SLOT(updateCombo(QString)));
}
class window2 {
    Q_OBJECT
    ... // your other definitions...
public slots:
    void updateCombo(QString);
};
void window2::updateCombo(QString str) {
    combo->addItem(str);
}

对于QSignalMapper方法,您可以在window1 (setName("buttonXYZ"))中命名按钮对象,将单击的信号连接到window2中的插槽,并询问发送者(sender()->name())的对象名称。

在接收槽你可以这样做:

m_combo->addItem(sender()->name());
or
if(sender()->name() == "Button1") {
   m_combo->addItem("Foo");
}