我正在使用QTableWidget并希望将一些单元格复制到剪贴板。似乎QTableWidget仅支持selectedItems方法。 出于某种原因,我将输出作为第一列,然后是第二列。不是:第一行,然后是第二行。这使得在某种程度上难以分离cols / rows。你知道出了什么问题吗?谢谢!
QList<QTableWidgetItem *> selectedCells(TableView->selectedItems());
QTableWidgetItem * item;
mCopyByteArray.clear();
foreach(item, selectedCells)
{
mCopyByteArray.append(item->text());
mCopyByteArray.append("\r\n");
}
构建时:
TableView = new QTableWidget(); /* I know that name somehow is wrong ;) */
TableView->setColumnCount(2);
QStringList HHeaderList;
HHeaderList << "Computer name" << "ServiceTag";
TableView->setHorizontalHeaderLabels(HHeaderList);
TableView->verticalHeader()->setVisible(false);
TableView->setEditTriggers(QTableWidget::NoEditTriggers);
有什么想法吗?谢谢!
答案 0 :(得分:0)
您可以改用QTableWidget::selectedRanges()
。小例子:
#include <QList>
#include <QTableWidget>
#include <QTableWidgetSelectionRange>
/...
// you can have more than one selected areas in the table. So you can have more then one
// selected ranges
QList <QTableWidgetSelectionRange*> selectRanges(TableView->selectedRanges());
for (int i =0; i != selectRanges.size(); ++i) {
QTableWidgetSelectionRange range = selectRanges.at(i);
int top = range.topRow();
int bottom = range.bottomRow();
for (int i = top; i <= bottom; ++i) {
QTableWidgetItem *item1 = TableView->itemAt(i, 0); //first column item
QTableWidgetItem *item2 = TableView->itemAt(i, 1); //second column item
// do desired stuff
}
}
注意:我不知道这种方法的性能问题。你可以查一下。
答案 1 :(得分:0)
我写的这个算法应该可以解决这个问题:
QList<QTableWidgetItem *> selectedCells(TableView->selectedItems());
mCopyByteArray.clear();
QString text;
int row_count = TableView->rowCount();
int column_count = TableView->columnCount();
for( int i = 0; i < row_count; i++ )
{
for( int j = 0; j < column_count; j++ )
{
text = selectedCells.at( i + j * row_count )->text();
mCopyByteArray.append( text );
mCopyByteArray.append( "\r\n" );
}
}
答案 2 :(得分:0)
不是真正的答案,而是我发现的更多信息:
似乎selectedItems()
函数返回所选项目的顺序是它们被选中的顺序。
此外,如果selectionBehavior
的{{1}}属性设置为QTableWidget
,则会按照选择行的顺序返回所选项目。例如,对于2x3表,其中行编号为“A”,“B”,列编号为“1”,“2”,“3”:如果选择B2然后选择A1,则所选项目为返回为:B1,B2,B3,A1,A2,A3。