- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的意图
我想创建一个 QWidget
并将其添加到 scrollArea
。
然后
为该QWidget
创建并设置网格布局
。
按钮
填充网格布局
,每个按钮有一个文本,其值来自输入 int* 数组
。我的代码概述:
我有一个带有 UI 表单
的 QDialog
应用程序。
在我的 UI 表单中,我使用 QtDesigner
添加了一个 scrollArea
。
在我的程序中,当某些事件发生时,我调用以下函数:
void View::setUpBatteryTypes(int* array,int size)
{
QGridLayout* gl=new QGridLayout();
QWidget *viewport = new QWidget;
viewport->setLayout(gl);
qDebug()<<"debug test 1";
ui->scrollArea->setWidget(viewport); //crashes here in 2nd call of func
qDebug()<<"debug test 2";
QPushButton* pushButtons=new QPushButton[size];
for(int i=0;i<size;i++)
{
pushButtons[i].setText(QVariant(array[i]).toString());
pushButtons[i].setMinimumSize(200,100);
pushButtons[i].setMaximumSize(400,200);
pushButtons[i].setStyleSheet("background-color: rgb(170,170,197);");
gl->addWidget(&pushButtons[i],(int)floor(i/3),i%3);
}
}
问题
我的问题是,当我第一次在我的应用程序中调用函数 setUpBatteryTypes
时,一切正常,并且该函数执行我打算执行的操作。但是,当在我的应用程序中第二次调用该函数时,它会在两个 qDebug() 语句之间的注释行中崩溃。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui::Dialog *ui;
public:
void setUpBatteryTypes(int*,int);
};
#endif // DIALOG_H
对话框.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QGridLayout>
#include <QDebug>
#include <QPushButton>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::setUpBatteryTypes(int* array,int size)
{
QGridLayout* gl=new QGridLayout();
QWidget *viewport = new QWidget;
viewport->setLayout(gl );
qDebug()<<"debug test 1";
qDebug()<<ui->scrollArea->children();
ui->scrollArea->setWidget(viewport);
qDebug()<<ui->scrollArea->children();
qDebug()<<"debug test 2";
QPushButton* pushButtons=new QPushButton[size];
for(int i=0;i<size;i++)
{
pushButtons[i].setText(QVariant(array[i]).toString());
pushButtons[i].setMinimumSize(200,100);
pushButtons[i].setMaximumSize(400,200);
pushButtons[i].setStyleSheet("background-color: rgb(170,170,197);");
gl->addWidget(&pushButtons[i],(int)floor(i/3),i%3);
}
}
main.cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog* w=new Dialog();
w->show();
int size=4;
int* array=new int[size];
for(int i=0;i<size;i++)
{
array[i]=i;
}
w->setUpBatteryTypes(array,size);
w->setUpBatteryTypes(array,size);
return a.exec();
}
dialog.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>380</width>
<height>280</height>
</rect>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
最佳答案
您添加了本地对象的地址作为参数。
这里你创建了一个对象数组,它是这个函数的本地对象
QPushButton* pushButtons=new QPushButton[size];
在这里你传递了他们的地址,这个地址在函数结束后最终会失效
gl->addWidget(&pushButtons[i],(int)floor(i/3),i%3);
编辑:尝试
for(int i=0;i<size;i++)
{
QPushButton* pushButtons=new QPushButton;
pushButtons=new QPushbutton;
...
gl->addWidget(pushButtons,(int)floor(i/3),i%3);
}
关于c++ - Qt Crash SIGSEGV Fault while dynamically adding widgets to scrollArea (ui->scrollArea->setWidget(...)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36206966/
这个问题是针对 Linux 提出的。使用 GCC 编译器。 如果 SIGSEGV(我的意思是通常会导致 SIGSEGV 的违规行为)发生在旨在捕获 SIGSEGV 的信号处理程序中,可以预期会有什么行
我正在构建一个 C++ 程序,我需要在其中处理 SIGSEGV 并且信号处理程序应该能够打印回溯。任何人都可以帮忙吗。 问候 最佳答案 获得 SIGSEV 回溯的最好方法是生成核心文件而不是打印回溯。
我有一个屏幕A,在执行了一些POST API任务后,我启用了一个按钮,然后单击按钮导航到屏幕B。当Reaction Native应用程序冻结并崩溃时,崩溃会随机发生。从其他屏幕导航到屏幕B也不是问题,
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在编写这个方法(C 语言),它应该为链表创建一个新节点。它在第一个 if (SIGSEGV 信号)之后的行崩溃 我正在调试该方法,因此后续行中可能会有更多错误,但目前我将感谢有关此特定行的任何观察
这是我的比较函数: int compareInts(const void *a, const void *b) { const int *pa = (const int*)a; con
我一直在研究一些有缺陷的代码,并想安装一个 SIGSEGV 处理程序来获取有关崩溃的更多信息。但是,我注意到我的处理程序没有被调用。 我一直在寻找原因,它似乎与损坏的堆栈指针值有关(它肯定没有被屏蔽)
我是编码新手。当我在 codecheff 中提交代码时,它给出“运行时错误(SIGSEGV)”。我不知道有什么问题请帮忙。提前致谢。 int call(int *x, int m) { int
CodeChef 问题: Shivam 是世界上最年轻的程序员,他只有 12 岁。 Shivam 正在学习编程,今天他正在编写他的第一个程序。 程序很简单,给定两个整数A和B,编写一个程序将这两个数字
我正在编写一个编程问题的解决方案。问题如下: Your program is to use the brute-force approach in order to find the Answer t
好吧,只是为了好玩,我正在研究埃拉托色尼筛。它最初运行良好,因此我寻求提高其运行时复杂性。现在,我不知道为什么,但我遇到了段错误。代码如下: #include #include int main(
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在创建一个简单的链表程序来插入和查看 LL 的元素。当我尝试插入第二个元素时,它给出 SIGSEV,但我不明白为什么?!! 请帮我指出问题: main.c: #include #includ
我试图提交此代码以解决 hackerearth 上的问题,但我得到了此 SIGSEGV 运行时错误。我读到了这个错误,但我无法让我的代码工作。有人说这是由于无效的内存引用、数组的动态初始化或数组索引超
我正在思考 leetcode 问题 167,但我的代码遇到了段错误 (SIGSEGV) 问题。下面是我的c代码,预期的答案是[1,3]。 #include #include /** * Return
我有一个在ARM平台上运行的多线程程序。在其中一个线程中,我将调用 system() 来运行某些 shell 命令。最近,我发现有时候,由system() fork 的子进程会以SIGSEGV终止。
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我很高兴知道为什么我遇到此错误 http://www.codechef.com/problems/AXR1P2在 codechef.com 中,我的代码是... #include #include i
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在使用 POSIX 套接字在 Android 上编写一些网络代码,但是当我调用 Sento 时,我收到了一个奇怪的 SIGSEGV(信号 11,代码 1)。我已经使用墓碑跟踪来确定它是哪一行,但坦
我是一名优秀的程序员,十分优秀!