无法连接到父母插槽

时间:2012-05-24 13:15:37

标签: qt

我以为我开始理解这一点,但似乎没有。

我正在尝试将堆叠的小部件连接在一起,以便孩子们可以向父级发送消息,告诉它更改视图。 QStackedWidget是主窗口的子窗口,它的页面是我自己创建的fomrs。我认为这是正确的方法吗?

因此,在其中一个儿童表格中,我尝试了以下内容:

// Set up a mapping between the buttons and the pages
QSignalMapper *mapper = new QSignalMapper(this);

mapper->setMapping(ui->automatedButton, 1); // Value of the index
connect(ui->automatedButton, SIGNAL(clicked()), mapper, SLOT(map()));

connect(mapper, SIGNAL(mapped(int)), ((QStackedWidget*)parentWidget()), SLOT(setCurrentIndex(int)));

但这似乎不起作用。我点击按钮,没有任何变化。但是,如果我这样做:

void MySelectionForm::on_automatedButton_clicked()
{
    ((QStackedWidget*)parentWidget())->setCurrentIndex(1);
}

我认为和以前一样?

我确实在运行时看到了消息,我猜这是关联的:

QObject::connect: Cannot connect QSignalMapper::mapped(int) to (null)::setCurrentIndex(int)

2 个答案:

答案 0 :(得分:3)

在致电parentItem()时,您是否检查过NULL没有返回QObject::connect()?听起来好像在构造函数之后设置了父项,这意味着parentItem()确实会返回NULL。我怀疑可能是Qt Designer如何推出。如果是这样,你需要在构造函数之外连接信号/槽,或者在另一个方法(一个未在构造函数内部调用的方法)中连接,或者在子项外部连接。

答案 1 :(得分:1)

根据消息,

((QStackedWidget*)parentWidget()), SLOT(setCurrentIndex(int)));  

导致

(null)::setCurrentIndex(int)

表示parentWidget()NULL

这基本上意味着表格不是QStackedWidget的孩子。 如果您手动创建表单,则必须执行类似的操作

MyForm *form = new MyForm( ui->stackedWidget );