如何在已经创建表格之后的表格上添加与表格中的行相同的行?

发布于 2025-01-28 09:19:39 字数 2495 浏览 2 评论 0原文

在我的应用中,我输入一个vlaue并说值设置了表的行数。在功能中,我将在此处发布与设置TableWidget相关的所有工作。我想要的是,以后使用相同的方法在以后添加新行。意思是,如果我输入“ 3”并生成了3行,如果我也输入新值,我希望能够添加更多行。在我的UI中,我有一个输入值的旋转框,此值基本上是我想要的行数。然后,我单击一个按钮,然后调用此功能。这部分还可以。

    void Pressurator::NozzleCount()
{
int nozzleCount = 0;
 int index = 0;
 nozzleCount = TabUI.nozzlesNum_SB->value();
 if(TabUI.tableWidget->rowCount() == 0){
     index = 0;
     TabUI.tableWidget->setRowCount(nozzleCount);
     qDebug()<<"NozzleCount: "<<nozzleCount<<"| Total Rows: "<<TabUI.tableWidget->rowCount();
 }else if(TabUI.tableWidget->rowCount() > 0){
     TabUI.tableWidget->setRowCount(TabUI.tableWidget->rowCount() + nozzleCount);
     index = TabUI.tableWidget->rowCount() - nozzleCount;
     qDebug()<<"NozzleCount: "<<nozzleCount<<"| Total Rows: "<<TabUI.tableWidget->rowCount();
     qDebug()<<"Index starts at: "<<index;
 }
 qDebug()<<"CHECK 1";


 for(int i=0; i<TabUI.tableWidget->rowCount(); i++){
     for(int j=0; j<TabUI.tableWidget->columnCount(); j++){
  TabUI.tableWidget->setItem(i,j, new QTableWidgetItem);
     }
 }
 qDebug()<<"CHECK 2";

 QLineEdit *lineEdit = new QLineEdit(parent);
        // Set validator
 QIntValidator *validator = new QIntValidator(0, 9, lineEdit);
        lineEdit->setValidator(validator);
 QStringList labels = {"Diameter(in)","Area(in²)","Type","Q(gpm)","DP(psi)"};
 TabUI.tableWidget->setHorizontalHeaderLabels(labels);

// QHeaderView* header = TabUI.tableWidget->horizontalHeader();
// header->setSectionResizeMode(QHeaderView::Stretch);

 qDebug()<<"CHECK 3";

 for(int i=0 ; i< nozzleCount; i++)
 {
// QDoubleSpinBox * ND_SB = new QDoubleSpinBox;
// QDoubleSpinBox * NA_SB = new QDoubleSpinBox;
 QComboBox * nozzleType = new QComboBox;


// ND_SB->setDecimals(5);ND_SB->setRange(0,500);
// NA_SB->setDecimals(5);NA_SB->setRange(0,500);
 nozzleType->addItems(nozzleTypesList);


// TabUI.tableWidget->setCellWidget(i,0, ND_SB);
// TabUI.tableWidget->setCellWidget(i,1, NA_SB);
 TabUI.tableWidget->setCellWidget(i,2, nozzleType);
 qDebug()<<"CHECK 4";

 }
 qDebug()<<"CHECK 5";



 QObject::connect(TabUI.tableWidget, &QTableWidget::itemChanged, this, &Pressurator::CalculateDiameterORArea);

 qDebug()<<"CHECK 6";


}

“检查#是我用来追踪我发生的问题的调试消息。每当我尝试在生成表的初始值之后输入新值时,我的应用在第一个循环中崩溃。我尝试插入一个声明该表是否为&gt;如果这样,任何新值都会转化为表末端添加的新行。

In my app I enter a vlaue and said value sets the number of rows to the table. Within the function I will post here I do all the stuff related to setting up the TableWidget. What I want is to to be able to add new rows later on using the same method. Meaning, if I entered '3' and generated 3 rows, I want to be able to add more rows if I enter new values as well. In my UI I have a spin box to which I enter a value, this value is basically how many rows I want. Then I click a button and this function is called. This part is okay.

    void Pressurator::NozzleCount()
{
int nozzleCount = 0;
 int index = 0;
 nozzleCount = TabUI.nozzlesNum_SB->value();
 if(TabUI.tableWidget->rowCount() == 0){
     index = 0;
     TabUI.tableWidget->setRowCount(nozzleCount);
     qDebug()<<"NozzleCount: "<<nozzleCount<<"| Total Rows: "<<TabUI.tableWidget->rowCount();
 }else if(TabUI.tableWidget->rowCount() > 0){
     TabUI.tableWidget->setRowCount(TabUI.tableWidget->rowCount() + nozzleCount);
     index = TabUI.tableWidget->rowCount() - nozzleCount;
     qDebug()<<"NozzleCount: "<<nozzleCount<<"| Total Rows: "<<TabUI.tableWidget->rowCount();
     qDebug()<<"Index starts at: "<<index;
 }
 qDebug()<<"CHECK 1";


 for(int i=0; i<TabUI.tableWidget->rowCount(); i++){
     for(int j=0; j<TabUI.tableWidget->columnCount(); j++){
  TabUI.tableWidget->setItem(i,j, new QTableWidgetItem);
     }
 }
 qDebug()<<"CHECK 2";

 QLineEdit *lineEdit = new QLineEdit(parent);
        // Set validator
 QIntValidator *validator = new QIntValidator(0, 9, lineEdit);
        lineEdit->setValidator(validator);
 QStringList labels = {"Diameter(in)","Area(in²)","Type","Q(gpm)","DP(psi)"};
 TabUI.tableWidget->setHorizontalHeaderLabels(labels);

// QHeaderView* header = TabUI.tableWidget->horizontalHeader();
// header->setSectionResizeMode(QHeaderView::Stretch);

 qDebug()<<"CHECK 3";

 for(int i=0 ; i< nozzleCount; i++)
 {
// QDoubleSpinBox * ND_SB = new QDoubleSpinBox;
// QDoubleSpinBox * NA_SB = new QDoubleSpinBox;
 QComboBox * nozzleType = new QComboBox;


// ND_SB->setDecimals(5);ND_SB->setRange(0,500);
// NA_SB->setDecimals(5);NA_SB->setRange(0,500);
 nozzleType->addItems(nozzleTypesList);


// TabUI.tableWidget->setCellWidget(i,0, ND_SB);
// TabUI.tableWidget->setCellWidget(i,1, NA_SB);
 TabUI.tableWidget->setCellWidget(i,2, nozzleType);
 qDebug()<<"CHECK 4";

 }
 qDebug()<<"CHECK 5";



 QObject::connect(TabUI.tableWidget, &QTableWidget::itemChanged, this, &Pressurator::CalculateDiameterORArea);

 qDebug()<<"CHECK 6";


}

The "CHECK # were debug messages I used to trace the problem that occurs for me. My app crashes at the first for loop at the top whenever I try enter a new value after the initial one that generates the table. I tried inserting an if statement that checks the table whether its rows are > 0 or not and if so any new value enter will translate to new rows added at the end of the table.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自由如风 2025-02-04 09:19:39

尝试一下

    void Pressurator::NozzleCount()
            {
             int nozzleCount = 0;
             nozzleCount = TabUI.nozzlesNum_SB->value();
            
            
             qDebug()<<"CHECK 1";
            
            
             
             qDebug()<<"CHECK 2";
            
             QLineEdit *lineEdit = new QLineEdit(parent);
                    // Set validator
             QIntValidator *validator = new QIntValidator(0, 9, lineEdit);
                    lineEdit->setValidator(validator);
             QStringList labels = {"Diameter(in)","Area(in²)","Type","Q(gpm)","DP(psi)"};
             TabUI.tableWidget->setHorizontalHeaderLabels(labels);
            
            // QHeaderView* header = TabUI.tableWidget->horizontalHeader();
            // header->setSectionResizeMode(QHeaderView::Stretch);
            
             qDebug()<<"CHECK 3";
            
             for(int i=0 ; i< nozzleCount; i++)
             {
             TabUI.tableWidget->insertRow(TabUI.tableWidget->rowCount());
for(int j = 0 ; j < TabUI.tableWidget->columnCount();++j)
              TabUI.tableWidget->setItem(TabUI.tableWidget->rowCount() - 1,j, new QTableWidgetItem(""));
            // QDoubleSpinBox * ND_SB = new QDoubleSpinBox;
            // QDoubleSpinBox * NA_SB = new QDoubleSpinBox;
             QComboBox * nozzleType = new QComboBox;
            
            
            // ND_SB->setDecimals(5);ND_SB->setRange(0,500);
            // NA_SB->setDecimals(5);NA_SB->setRange(0,500);
             nozzleType->addItems(nozzleTypesList);
            
            
            // TabUI.tableWidget->setCellWidget(i,0, ND_SB);
            // TabUI.tableWidget->setCellWidget(i,1, NA_SB);
             TabUI.tableWidget->setCellWidget(i,2, nozzleType);
             qDebug()<<"CHECK 4";
            
             }
             qDebug()<<"CHECK 5";
            

Try this

    void Pressurator::NozzleCount()
            {
             int nozzleCount = 0;
             nozzleCount = TabUI.nozzlesNum_SB->value();
            
            
             qDebug()<<"CHECK 1";
            
            
             
             qDebug()<<"CHECK 2";
            
             QLineEdit *lineEdit = new QLineEdit(parent);
                    // Set validator
             QIntValidator *validator = new QIntValidator(0, 9, lineEdit);
                    lineEdit->setValidator(validator);
             QStringList labels = {"Diameter(in)","Area(in²)","Type","Q(gpm)","DP(psi)"};
             TabUI.tableWidget->setHorizontalHeaderLabels(labels);
            
            // QHeaderView* header = TabUI.tableWidget->horizontalHeader();
            // header->setSectionResizeMode(QHeaderView::Stretch);
            
             qDebug()<<"CHECK 3";
            
             for(int i=0 ; i< nozzleCount; i++)
             {
             TabUI.tableWidget->insertRow(TabUI.tableWidget->rowCount());
for(int j = 0 ; j < TabUI.tableWidget->columnCount();++j)
              TabUI.tableWidget->setItem(TabUI.tableWidget->rowCount() - 1,j, new QTableWidgetItem(""));
            // QDoubleSpinBox * ND_SB = new QDoubleSpinBox;
            // QDoubleSpinBox * NA_SB = new QDoubleSpinBox;
             QComboBox * nozzleType = new QComboBox;
            
            
            // ND_SB->setDecimals(5);ND_SB->setRange(0,500);
            // NA_SB->setDecimals(5);NA_SB->setRange(0,500);
             nozzleType->addItems(nozzleTypesList);
            
            
            // TabUI.tableWidget->setCellWidget(i,0, ND_SB);
            // TabUI.tableWidget->setCellWidget(i,1, NA_SB);
             TabUI.tableWidget->setCellWidget(i,2, nozzleType);
             qDebug()<<"CHECK 4";
            
             }
             qDebug()<<"CHECK 5";
            
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文