如何将新行添加到现有的 QTablewidget

Posted

技术标签:

【中文标题】如何将新行添加到现有的 QTablewidget【英文标题】:How can i add new row to the existing QTablewidget 【发布时间】:2016-08-25 10:36:27 【问题描述】:

QTableWidget 上获取mouseEvent 时出现问题,此代码是用tabelwidgetmouseclickevent 创建一个窗口,当我单击鼠标右键时,我得到两个名为“add”和“的操作事件选项删除”, 我想在单击“添加”事件函数时添加 3 列的新行,并在单击“删除”事件函数时删除最后一行,

(对不起我的英语),任何帮助表示赞赏。

 #include "notepad.h"
    #include <QMessageBox>
    #include <QTableView>
    #include <QMouseEvent>

    Notepad::Notepad() 
    

         test() ;

        add_action = new QAction(tr("Add cell"), this);
        add_action->setIcon(QIcon("add.jpg"));
        Delete_action = new QAction(tr("Delete cell"), this);
        Delete_action->setIcon(QIcon("delete.jpg"));

        connect(Delete_action, SIGNAL(triggered()), this, SLOT(Delete()));
        connect(add_action, SIGNAL(triggered()), this, SLOT(add()));

        centralWidget()->setAttribute(Qt::WA_TransparentForMouseEvents);
        centralWidget()->setAttribute(Qt::WA_MouseTracking,true);

        setMouseTracking(true);

    
    void Notepad::test() 
           
        QTableWidget* table = new QTableWidget();
        QTableWidgetItem* tableItem = new QTableWidgetItem();

        table->setRowCount(1);
        table->setColumnCount(3);
        table->setItem(0,0,new QTableWidgetItem());
        table->setItem(0,1,new QTableWidgetItem());
        table->setItem(0,2,new QTableWidgetItem());

        table->setMouseTracking(true);
        table->viewport()->setMouseTracking(true);
        table->installEventFilter(this);
        table->viewport()->installEventFilter(this);

        table->setSelectionBehavior(QAbstractItemView::SelectRows);
        table->setSelectionMode(QAbstractItemView::SingleSelection);

        tableItem->setFlags(tableItem->flags() ^ Qt::ItemIsEditable);
        table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
        setCentralWidget(table);


    

    void Notepad::mouseReleaseEvent (QMouseEvent * event )
       


        QMessageBox* msgBox;
        if(event->button() == Qt::RightButton)
          
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*> (event);
           QMenu *menu = new QMenu(this);
           menu->addAction(add_action);
           menu->addAction(Delete_action);
           menu->exec(mouseEvent->globalPos());

         
    
    void Notepad::add() 
    
        QTableWidget* table = new QTableWidget();
        test();

        table->setColumnCount(3);*/


        int newRow = table->rowCount();
        int newcol = table->columnCount();
        qDebug() << newRow;  
        for (int row ; row < newRow+1 ; ++row)
        
            QWidget *parent;
            QStyleOptionViewItem option;
            for (int column = 0; column < 3; ++column)
            

            table->insertRow( table->rowCount());
            table->insertColumn( newcol );
            
        

        setCentralWidget(table);
        centralWidget()->setAttribute(Qt::WA_TransparentForMouseEvents);
        setMouseTracking(true);
    
    void Notepad::Delete() 
    
        QTableWidget* table = new QTableWidget();

        add();

        int row=table->rowCount();


    if (int i= row)
        table->removeRow(i);

    
        setCentralWidget(table);
        centralWidget()->setAttribute(Qt::WA_TransparentForMouseEvents);
        setMouseTracking(true);
    

【问题讨论】:

QWidgets 有专门的contextMenuEvent 用于此类操作。但是有什么问题呢? 我想在每次单击添加事件时添加一个包含 3 列的新行,因为从早上开始我就很挣扎,但我没有得到任何解决方案,请帮我找到解决方案。 如果您想将行数增加一,只需使用table-&gt;setRowCount(table-&gt;rowCount() + 1)。这不是你要找的吗? 【参考方案1】:

你有两个问题合二为一:如何创建上下文菜单以及如何添加行。

如何创建上下文菜单。

第 1 步:创建一次菜单。例如在构造函数中。

// _menu is a class member.
_menu = new QMenu(this);
_menu->addAction(add_action);
_menu->addAction(Delete_action);

第2步:在相应的事件中显示:

void Notepad::contextMenuEvent(QContextMenuEvent *event)

    _menu->exec(event->globalPos());

如何添加一行。

首先,您需要一个表作为类成员。为什么每次都创建一个新实例?它们是不同的对象!您在每个add 调用上创建一个新的表格小部件!

其次,您需要增加行数并填充新行:

void Notepad::add()

    const int newIndex = _table->rowCount();
    _table->setRowCount(newIndex + 1);
    // Fill data in row with index newIndex.
    ...

【讨论】:

以上是关于如何将新行添加到现有的 QTablewidget的主要内容,如果未能解决你的问题,请参考以下文章

需要将值添加到现有的行和列中

如何在txt文件中添加新行

将文本插入到现有的大文件中

如何将多维数组添加到现有的 Spark DataFrame

如何将 Mailchimp 添加到现有的注册框

如何将熊猫数据添加到现有的 csv 文件中?