QTableWidget中实现表格的自动换行

来源:互联网 发布:编程思维 编辑:程序博客网 时间:2024/05/25 16:38

1参考资料:稍后补充。

2.实现方法1:该方法十分简单,只需要一行代码即可。

用到的QTableWidget中的函数:

信号:itemChanged(QTableWidgetItem*)//单元格内容改变后触发该信号
槽函数:resizeRowsToContents()//根据单元格内容调整行高

将信号和槽函数连接起来,就可以实现改变单元格内容后,行高跟着改变,然后它会根据单词间的空格自动换行。所以只用一行就可以。

    connect(ui->tableWidget,SIGNAL(itemChanged(QTableWidgetItem*)),            ui->tableWidget,SLOT(resizeRowsToContents()) );

实现方法2:方法1稍微有个缺点就是如果输入一段英文字符串,它就不会自动分行,显示不全的部分会以"..."代替。方法2是给单元格写个代理,重新实现paint()函数。

部分示例代码如下:

    //根据表格内容增加行高    connect(ui->tableWidget,SIGNAL(itemChanged(QTableWidgetItem*)),            ui->tableWidget,SLOT(resizeRowsToContents()) );    //设置表格自动换行代码如下    //新建代理    TextEditDelegate * textEditer = new TextEditDelegate ;    //给表格设置代理    ui->tableWidget->setItemDelegateForRow(0,textEditer);    //给第一行第一列表格设置文字    ui->tableWidget->setRowCount(2);    ui->tableWidget->setColumnCount(2);    QTableWidgetItem * item0 = ui->tableWidget->item(0,0);    if(item0 == NULL)    {        item0 = new QTableWidgetItem;        ui->tableWidget->setItem(0,0,item0);    }    item0->setText(QString("ThisIsATestToVerifyIfTheTableCouldGoToNextRow."));    //给第2行第1列设置文字    QTableWidgetItem * item1 = ui->tableWidget->item(1,0);    if(item1 == NULL)    {        item1 = new QTableWidgetItem;        ui->tableWidget->setItem(1,0,item1);    }    item1->setText(QString("这是段测试语句,用来测试表格是否具有换行功能。"));

实现方法1的效果如下图第2行所示,行高会增加,中文会自动换行;实现方法2的效果如下图第1行所示,行高没有增加,但是换行了。所以实现方法2需要用其他方法调整行高,目前还没实现。

另外全部源代码下载链接:http://pan.baidu.com/s/1slNl61n

编译环境Qt5.7.0(mingw版)

原创粉丝点击