C++ 由于在可调整大小的滚动区域上接收到来自操作系统错误的信号,下位机停止
我在QTabWidget里面有一个qscrollara,在QTabWidget旁边有一个QWidget。我想在调整主窗口的大小时调整QScrollArea的大小,因此我制作了如下代码:C++ 由于在可调整大小的滚动区域上接收到来自操作系统错误的信号,下位机停止,c++,qt,qt4,C++,Qt,Qt4,我在QTabWidget里面有一个qscrollara,在QTabWidget旁边有一个QWidget。我想在调整主窗口的大小时调整QScrollArea的大小,因此我制作了如下代码: void frmSummaryContact::on_btnAddNewContact_clicked() { MainWindow *mnWindow = qobject_cast<MainWindow *>(this->parent()->parent()->parent
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");
}
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;
}
我的QTabWidget是不同的形式,所以我用qobject_cast来转换它。同时,在另一种形式中,我有一个toogle按钮来隐藏QWidget,这样我的QTabWidget就会变得更宽。因此,在这种形式下,我有一个如下代码:
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");
}
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;
}
我已经意识到,当WidgetResizeable为true时,我无法更改几何体。它显示由于接收到来自操作系统错误的信号,下位机停止。所以我想把它弄错,改变几何结构,然后再把它弄成真的。但当我想让它成为现实时,我遇到了同样的错误。有人能帮我解决我的问题吗?如果您的程序使用未初始化的指针,可能会导致SIGSEGV