我在Qt遇到了问题。我必须制作两个窗口: 在第一个中,您可以单击10个按钮,每个按钮必须在第二个窗口的comboBox中添加一个项目(按钮的名称)。但是我不能参考这个comboBox。我没有任何想法:(
我试图让变量受到保护和公开,但它不起作用。我已将window2.h
添加到window1
,我试图做这样的事情:
//this is in window1
void window1::on_button1_clicked() {
window2::combo->addItem("button1");
}
答案 0 :(得分:0)
您可以将按钮的单击信号连接到第二个窗口中的插槽。此插槽会将信息添加到组合框中。
为此,您需要区分彼此的信号。最好的方法是使用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);
}
答案 1 :(得分:0)
除了QSignalMapper方法,您可以在window1(setName("buttonXYZ")
)中命名按钮对象,将单击的信号连接到window2中的插槽,并询问发送方的对象名称(sender()->name()
)。
所以在接收槽中你可以做到:
m_combo->addItem(sender()->name());
or
if(sender()->name() == "Button1") {
m_combo->addItem("Foo");
}