QTableWidget单元格相关信号

通过一段代码详细说明QTableWidget的单元格被点击(包括单击和双击)以及内容被编辑时,发出的相关信号
(1)主要有 cellChanged,cellActivated,cellClicked,cellDoubleClicked,cellEntered,cellPressed以及相应的item类信号
(2)各个信号发出的时机
(3)信号发出的先后

通过以下代码,详尽地探索了,点击一个单元格,到点击另外一个单元格之间,到底Qt背后做了哪些事情。


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(500,300);
    QTableWidget* table=new QTableWidget(3,5);
    //开启表格的鼠标跟踪
    table->setMouseTracking(true);
    this->init_table(table);
    this->setup_connections(table);
    this->setup_connections2(table);
    this->setup_connections3(table);
    this->setCentralWidget(table);
}

void MainWindow::init_table(QTableWidget *table)
{
    //对表格进行了初始化之后,就无需再双击使得表格被编辑之后,单击单元格发出信号:QTableWidget::itemClicked
    for(int i=0;irowCount();i++)
    {
        for(int j=0;jcolumnCount();j++)
        {
            table->setItem(i,j,new QTableWidgetItem(""));
        }
    }
}

void MainWindow::setup_connections(QTableWidget *table)
{
    //当前单元格按下enter键时,发出该信号
    connect(table,&QTableWidget::cellActivated,[=](int row,int col){
        qDebug()<<"QTableWidget::cellActivated"<   itemSelectionChanged   -> cellPressed

    //如果通过键盘方向键来移动选中,顺序:
    //itemSelectionChanged  -> currentCellChanged


    connect(table,&QTableWidget::currentCellChanged,[=](int crow,int ccol,int prow,int pcol){
        qDebug()<<"QTableWidget::currentCellChanged("<setMouseTracking(true);情况下才会发出
    //在鼠标从窗口外移入到表格的窗口(不包含有单元格的区域)上发出该信号
    connect(table,&QTableView::viewportEntered,[=](){
        qDebug()<<"QTableView::viewportEntered";
    });
}

你可能感兴趣的:(Qt)