劣质停止是因为它在可调整大小的scrollarea上收到来自操作系统错误的信号

时间:2014-12-10 03:50:25

标签: c++ qt qt4

我在QTabWidget中有一个QScrollArea,我的QTabWidget旁边有一个QWidget。我希望在调整主窗口大小时调整QScrollArea的大小,所以我这样编写了这样的代码:

void frmSummaryContact::on_btnAddNewContact_clicked()
{
    MainWindow *mnWindow = qobject_cast<MainWindow *>(this->parent()->parent()->parent()->parent()->parent()->parent());
    QTabWidget *tbWidget = qobject_cast<QTabWidget *>(this->parent()->parent()->parent()->parent());
    frmDetailContact *frm = new frmDetailContact(mnWindow, "input", -1, mnWindow->rightPane());

    QScrollArea *scrlForm = new QScrollArea;
    scrlForm->setWidgetResizable(true);
    scrlForm->setWidget(frm);

    mnWindow->AddNewTab(tbWidget, scrlForm, "Add Contact");
}

我的QTabWidget有不同的形式,所以我用qobject_cast投了它。同时在另一种形式,我有一个toogle按钮隐藏QWidget,所以我的QTabWidget变宽。所以在那种形式我有这样的代码:

void frmDetailContactToggle::on_btnSearch_clicked()
{
    MainWindow *mnWindow = qobject_cast<MainWindow *>(this->parent()->parent()->parent());
    QLayoutItem *child;

    while ((child = mnWindow->rightPane()->layout()->takeAt(0)) != 0)
        child->widget()->setVisible(false);

    mnWindow->rightPane()->setVisible(false);
    QScrollArea *scrlContent = qobject_cast<QScrollArea *>(mnWindow->tabContentWidget()->currentWidget());
    scrlContent->setWidgetResizable(false);
    mnWindow->tabContentWidget()->setGeometry(mnWindow->tabContentWidget()->x(), mnWindow->tabContentWidget()->y(), m_width - mnWindow->tabContentWidget()->x() - 10, mnWindow->tabContentWidget()->height());
    scrlContent->setWidgetResizable(true);
    m_showRightPane = false;
}

我意识到当WidgetResizable为真时我无法改变几何形状。它显示&#34;劣质停止,因为它接收到来自操作系统的信号&#34;错误。所以我想把它变成假的,改变几何形状,然后再把它变成真的。但是当我想要成功时,我会遇到同样的错误。有谁可以帮我解决我的问题?

1 个答案:

答案 0 :(得分:0)

如果您的程序使用未初始化的指针,则可能导致SIGSEGV。