代码之家  ›  专栏  ›  技术社区  ›  advseo32

如何用可编辑项和不可编辑项填充Qtablewidget

  •  2
  • advseo32  · 技术社区  · 11 年前

    每个人

    我在用第一行的可编辑项填充Qtablewidget时遇到问题,然后

    其余行的不可编辑项到目前为止她是我的实现

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QTableWidgetItem>
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
    
    
    
        QTableWidgetItem *item= NULL;
        for(int row=0; row < ui->tableWidget->rowCount(); row++)
        {
            for (int col=0; col< ui->tableWidget->columnCount(); col++)
            {
                if(row == 1)
                {
                    item = new QTableWidgetItem;
                    item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
                    ui->tableWidget->setItem(row,col,item);
    
                }else{
    
                    item = new QTableWidgetItem;
                    item->setFlags(Qt::NoItemFlags);
                    ui->tableWidget->setItem(row,col,item);
    
                }
            }
        }
    
    
    
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   Aleksandar    11 年前

    此外,在填充tableWidget之前,您需要设置行数和列数:

    ui->tableWidget->setRowCount(numberOfRows)

    ui->tableWidget->setColumnCount(numberOfColumnss)

    由于您不知道需要多少行(因为您希望用户能够编辑从一行到无限行的行),我会这样做:

    ui->tableWidget->setRowCount(2);
    

    …只添加2行(“第0行和第1行”),所以用户只能看到他必须填写的两行。您需要一种机制来检查是否所有单元格都已填充(例如:每次单元格项被更改时,您都会检查所有其他项是否已填充,而不是空的),因此只有当它们已填充时,用户才能传递到编辑新行,您将为下一行动态添加到表中,如下所示:

        rowNumber = ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(rowNumber);
        for (int col=0; col< ui->tableWidget->columnCount(); col++){
            item = new QTableWidgetItem;
            item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
            ui->tableWidget->setItem(rowNumber ,col,item);
        }
    

    我希望这能有所帮助。

    推荐文章