动态删除QLabel 我正在努力创建一个QT和C++的GUI。
我动态地创建了一些伙伴(动态删除QLabel 我正在努力创建一个QT和C++的GUI。,c++,qt,C++,Qt,我动态地创建了一些伙伴(QLabel+QSpinBox),以刷新我的程序在上千轮循环中出错的数量 我的创建代码: if((num_fotos % 1000) == 0){ if(num_layouts < NUM_FAIL_COUNT){ for(int i = 0; i < (buffer->length()-1); i++){ sum_100_fallos += int(buffer->at(i)); }
QLabel
+QSpinBox
),以刷新我的程序在上千轮循环中出错的数量
我的创建代码:
if((num_fotos % 1000) == 0){
if(num_layouts < NUM_FAIL_COUNT){
for(int i = 0; i < (buffer->length()-1); i++){
sum_100_fallos += int(buffer->at(i));
}
QLabel * label_1000 = new QLabel();
label_1000->setText("Fallos 1000_" + QString::number(num_fotos/1000) + ": ");
label_1000->setMinimumHeight(24);
QSpinBox * spinBox_1000 = new QSpinBox();
//newElements->append(label_1000);
spinBox_1000->setReadOnly(true);
spinBox_1000->setRange(0, 1000);
spinBox_1000->setMinimumHeight(24);
new_layouts[num_layouts] = new QHBoxLayout;
//newElements->append(spinBox_1000);
new_layouts[num_layouts]->addWidget(label_1000);
new_layouts[num_layouts]->addWidget(spinBox_1000);
spinBox_1000->setValue(num_fallos_1000);
num_fallos_1000 = 0;
ui->verticalLayout_5->addLayout(new_layouts[num_layouts]);
num_layouts++;
}else{
aux = num_layouts % NUM_FAIL_COUNT;
delete new_layouts[aux];
for(int i = 0; i < (buffer->length()-1); i++){
sum_100_fallos += int(buffer->at(i));
}
QLabel * label_1000 = new QLabel();
label_1000->setText("Fallos 1000_" + QString::number(num_fotos/1000) + ": ");
label_1000->setMinimumHeight(24);
QSpinBox * spinBox_1000 = new QSpinBox();
//newElements->append(label_1000);
spinBox_1000->setReadOnly(true);
spinBox_1000->setRange(0, 1000);
spinBox_1000->setMinimumHeight(24);
new_layouts[aux] = new QHBoxLayout;
//newElements->append(spinBox_1000);
new_layouts[aux]->addWidget(label_1000);
new_layouts[aux]->addWidget(spinBox_1000);
spinBox_1000->setValue(num_fallos_1000);
num_fallos_1000 = 0;
ui->verticalLayout_5->addLayout(new_layouts[aux]);
num_layouts++;
}
}
if((num\u fotos%1000)==0){
if(num_布局长度()-1);i++){
sum_100_fallos+=int(缓冲区->at(i));
}
QLabel*label_1000=新的QLabel();
label_1000->setText(“Fallos 1000”+QString::number(num_fotos/1000)+“:”;
标签_1000->设置最小高度(24);
QSpinBox*spinBox_1000=新QSpinBox();
//新元素->附加(标签_1000);
spinBox_1000->setReadOnly(真);
spinBox_1000->setRange(0,1000);
spinBox_1000->设置最小高度(24);
新的布局[num_layouts]=新的QHBoxLayout;
//新元素->附加(spinBox\u 1000);
新的_布局[num_布局]->addWidget(标签_1000);
新的布局[num\u layouts]->addWidget(spinBox\u 1000);
spinBox_1000->setValue(num_fallos_1000);
num_fallos_1000=0;
ui->verticalLayout_5->addLayout(新建布局[num_布局]);
num_布局++;
}否则{
aux=num\u布局%num\u失败\u计数;
删除新的_布局[aux];
对于(int i=0;i<(缓冲区->长度()-1);i++){
sum_100_fallos+=int(缓冲区->at(i));
}
QLabel*label_1000=新的QLabel();
label_1000->setText(“Fallos 1000”+QString::number(num_fotos/1000)+“:”;
标签_1000->设置最小高度(24);
QSpinBox*spinBox_1000=新QSpinBox();
//新元素->附加(标签_1000);
spinBox_1000->setReadOnly(真);
spinBox_1000->setRange(0,1000);
spinBox_1000->设置最小高度(24);
新的_布局[aux]=新的QHBoxLayout;
//新元素->附加(spinBox\u 1000);
新的_布局[aux]->addWidget(标签_1000);
新的_布局[aux]->addWidget(spinBox_1000);
spinBox_1000->setValue(num_fallos_1000);
num_fallos_1000=0;
ui->verticalLayout_5->addLayout(新的布局[aux]);
num_布局++;
}
}
NUM\u FAIL\u COUNT
是同时显示的(qlabel
+QLineEdit
)数。
如果少于NUM\u FAIL\u COUNT
,我将创建新布局并将其添加到视图中
如您所见,这是我动态创建的。
但是,如果有多个NUM\u FAIL\u COUNT
,我想删除整个第一个布局及其子布局,以便在底部添加新布局。
发生的情况是,第一个布局被删除,而不是其子布局,与QLabel
+QLineEdit
重叠
我曾尝试通过children()
调用,使用指针deleteLater()
访问它,并尝试在删除布局之前清除布局
我怎么想的不对?
感谢您的回答。您可以创建QList并存储指向已创建QWidgets的指针。下面是一个简单的例子: mainwindow.hpp:
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
QList<QWidget*> widgets;
};
#endif // MAINWINDOW_HPP
\ifndef主窗口\u水电站
#定义主窗口\u水电站
#包括
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
私人:
QList小部件;
};
#endif//main window\u水电站
mainwindow.cpp:
#include "mainwindow.hpp"
#include <QLabel>
#include <QVBoxLayout>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QVBoxLayout *mainLayout = new QVBoxLayout;
QVBoxLayout *widgetLayout = new QVBoxLayout;
QHBoxLayout *buttonLayout = new QHBoxLayout;
QPushButton *add = new QPushButton("Add", this);
QPushButton *remove = new QPushButton("Remove", this);
buttonLayout->addWidget(add);
buttonLayout->addWidget(remove);
mainLayout->addLayout(widgetLayout);
mainLayout->addLayout(buttonLayout);
setCentralWidget(new QWidget(this));
centralWidget()->setLayout(mainLayout);
connect(remove, &QPushButton::clicked, [=](){
if (widgets.size() > 0) {
QWidget *widget = widgets.takeLast();
widgetLayout->removeWidget(widget);
widget->deleteLater();
}
});
connect(add, &QPushButton::clicked, [=](){
QWidget *widget = new QLabel("Test " + QString::number(widgets.size()), this);
widgetLayout->addWidget(widget);
widgets.append(widget);
});
}
#包括“mainwindow.hpp”
#包括
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父窗口)
{
QVBoxLayout*mainLayout=新的QVBoxLayout;
QVBoxLayout*widgetLayout=新的QVBoxLayout;
QHBoxLayout*按钮布局=新的QHBoxLayout;
QPushButton*add=新的QPushButton(“添加”,此项);
QPushButton*remove=新的QPushButton(“remove”,这是);
按钮布局->添加小部件(添加);
按钮布局->添加小部件(删除);
mainLayout->addLayout(widgetLayout);
主布局->添加布局(按钮布局);
setCentralWidget(新的QWidget(this));
centralWidget()->setLayout(mainLayout);
连接(删除,&QPushButton::单击,[=](){
if(widgets.size()>0){
QWidget*widget=widgets.takeLast();
widgetLayout->removeWidget(小部件);
widget->deleteLater();
}
});
连接(添加,&QPushButton::单击,[=](){
QWidget*widget=newqlabel(“Test”+QString::number(widgets.size()),this);
widgetLayout->addWidget(小部件);
widgets.append(widget);
});
}
致以最诚挚的问候您可以创建QList并存储指向已创建QWidget的指针。下面是一个简单的例子: mainwindow.hpp:
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
QList<QWidget*> widgets;
};
#endif // MAINWINDOW_HPP
\ifndef主窗口\u水电站
#定义主窗口\u水电站
#包括
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
私人:
QList小部件;
};
#endif//main window\u水电站
mainwindow.cpp:
#include "mainwindow.hpp"
#include <QLabel>
#include <QVBoxLayout>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QVBoxLayout *mainLayout = new QVBoxLayout;
QVBoxLayout *widgetLayout = new QVBoxLayout;
QHBoxLayout *buttonLayout = new QHBoxLayout;
QPushButton *add = new QPushButton("Add", this);
QPushButton *remove = new QPushButton("Remove", this);
buttonLayout->addWidget(add);
buttonLayout->addWidget(remove);
mainLayout->addLayout(widgetLayout);
mainLayout->addLayout(buttonLayout);
setCentralWidget(new QWidget(this));
centralWidget()->setLayout(mainLayout);
connect(remove, &QPushButton::clicked, [=](){
if (widgets.size() > 0) {
QWidget *widget = widgets.takeLast();
widgetLayout->removeWidget(widget);
widget->deleteLater();
}
});
connect(add, &QPushButton::clicked, [=](){
QWidget *widget = new QLabel("Test " + QString::number(widgets.size()), this);
widgetLayout->addWidget(widget);
widgets.append(widget);
});
}
#包括“mainwindow.hpp”
#包括
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父窗口)
{
QVBoxLayout*mainLayout=新的QVBoxLayout;
QVBoxLayout*widgetLayout=新的QVBoxLayout;
QHBoxLayout*按钮布局=新的QHBoxLayout;
QPushButton*add=新的QPushButton(“添加”,此项);
QPushButton*remove=新的QPushButton(“remove”,这是);
按钮布局->添加小部件(添加);
按钮布局->添加小部件(删除);
mainLayout->addLayout(widgetLayout);
主布局->添加布局(按钮布局);
setCentralWidget(新的QWidget(this));
centralWidget()->setLayout(mainLayout);
连接(删除,&QPushButton::单击,[=](){
if(widgets.size()>0){
QWidget*widget=widgets.takeLast();
widgetLayout->removeWidget(小部件);
widget->deleteLater();
}
});
连接(添加,&QPushButton::单击,[=](){
QWidget*widget=newqlabel(“Test”+QString::number(widgets.size()),this);
widgetLayout->addWidget(小部件);
widgets.append(widget);