今天接触了下QTableWidget,感觉用用起来挺方便的
QTableWidget *table = new QTableWidget(this); table->setColumnCount(3); table->setRowCount(5); QStringList headers; headers << "Line Number" << "ID" << "Name" << "Age" << "Sex"; table->setHorizontalHeaderLabels(headers); table->setItem(0, 0, new QTableWidgetItem(QString("1"))); table->setItem(1, 0, new QTableWidgetItem(QString("2"))); table->setItem(2, 0, new QTableWidgetItem(QString("3"))); table->setItem(3, 0, new QTableWidgetItem(QString("4"))); table->setItem(4, 0, new QTableWidgetItem(QString("5"))); table->setItem(0, 1, new QTableWidgetItem(tr("20100112")));
首先创建了QTableWidget对象,然后设置列数和行数。接下来使用一个QStringList,把每一列的标题设置了一下。然后调用addItem()函数。这个函数前两个参数分别是行row和列col,然后第三个参数构建一个QTableWidgetItem对象,这样,Qt就会把这个对象放在第row行第col列的单元格里面。注意,这里的行和列都是从0开始的。
table->setColumnWidth(0,180); //设置列宽
table->setSelectionMode(QAbstractItemView::SingleSelection);//设置选择模式,选择单行
table->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为,以行为单位
table->setShowGrid(false); //隐藏边框
table->horizontalHeader()->setStretchLastSection(true); //适应大小变化
如果你想有一个表,使用自己的数据模型,你应该使用QTableView,而不是这个类。因为这个类有一个约束就表的每一项必须是QTableWidget类的对象。
本来想获得光标所在行号的,想了很多方法,最多的是通过坐标QCursor::pos(),然后int row=musicTable->itemAt(QCursor::pos())->row()
或者row=musicTable->indexAt(QCursor::pos())->row();
结果row都是为-1,到现在都还不明白为什么
终于想出了另一个办法:
connect(musicTable,SIGNAL(itemPressed(QTableWidgetItem*)),this,
SLOT(itemPreeSlot(QTableWidgetItem*))); //获得光标所在行号
自己写个槽itemPreeSlot(QTableWidgetItem*){ int row=item->row();}