QTableWidgetSelectionRange Spreadsheet::selectedRange() const
{
QList<QTableWidgetSelectionRange> ranges = selectedRanges();
if (ranges.isEmpty())
return QTableWidgetSelectionRange();
return ranges.first();
}
书上说因为在构造函数中已经设置了选择模式为QAbstractItemView::ContiguousSelection,所以选择范围不可以能再超过1。
这句话我没看懂,特别是不能再超过1这里,我没看懂。
这句话我没看懂,特别是不能再超过1这里,我没看懂。
这句话我没看懂,特别是不能再超过1这里,我没看懂。
重要的事情说三遍!求解释。
void Spreadsheet::copy()
{
QTableWidgetSelectionRange range = selectedRange();
QString str;
for (int i = 0; i < range.rowCount(); ++i) {
if (i > 0)
str += "\n";
for (int j = 0; j < range.columnCount(); ++j) {
if (j > 0)
str += "\t";
str += formula(range.topRow() + i, range.leftColumn() + j);
}
}
QApplication::clipboard()->setText(str);
}
void Spreadsheet::paste()
{
QTableWidgetSelectionRange range = selectedRange();
QString str = QApplication::clipboard()->text();
QStringList rows = str.split('\n');
int numRows = rows.count();
int numColumns = rows.first().count('\t') + 1;
if (range.rowCount() * range.columnCount() != 1
&& (range.rowCount() != numRows
|| range.columnCount() != numColumns)) {
QMessageBox::information(this, tr("Spreadsheet"),
tr("The information cannot be pasted because the copy "
"and paste areas aren't the same size."));
return;
}
for (int i = 0; i < numRows; ++i) {
QStringList columns = rows[i].split('\t');
for (int j = 0; j < numColumns; ++j) {
int row = range.topRow() + i;
int column = range.leftColumn() + j;
if (row < RowCount && column < ColumnCount)
setFormula(row, column, columns[j]);
}
}
somethingChanged();
}
我个人觉得可能是因为我上面的选择模式没搞懂,所以在past槽中其中一句: if (range.rowCount() * range.columnCount() != 1&&(...)),我没有看懂。
求解释,求帮忙!
求解释,求帮忙!
求解释,求帮忙!
求解释,求帮忙!
4 个解决方案
#1
不要在意哪句话(我都没看懂
,也许书上写错了
),
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
#2
嗯,但是我还有一个疑问,在这个函数中:
QTableWidgetSelectionRange Spreadsheet::selectedRange() const
{
QList<QTableWidgetSelectionRange> ranges = selectedRanges();
if (ranges.isEmpty())
return QTableWidgetSelectionRange();
return ranges.first();
}
QList<QTableWidgetSelectionRange> ranges = selectedRanges() ;
为啥这个函数只返回第一个节点( return ranges.first();)??
求解释!
#3
QList<QTableWidgetSelectionRange>表示QList的元素是选定的区域, return ranges.first():表示返回第一个选定区域。
这里就可以理解”选择模式为QAbstractItemView::ContiguousSelection,所以选择范围不可能再超过1“这句话了。
因为QAbstractItemView::ContiguousSelection模式只能选定一个区域,所以return ranges.first()就够了
“选择范围不可能再超过1”改为“选择区域的个数不可能再超过1”就好理解多了
#4
不要在意哪句话(我都没看懂 ,也许书上写错了 ),
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
嗯,但是我还有一个疑问,在这个函数中:
QTableWidgetSelectionRange Spreadsheet::selectedRange() const
{
QList<QTableWidgetSelectionRange> ranges = selectedRanges();
if (ranges.isEmpty())
return QTableWidgetSelectionRange();
return ranges.first();
}
QList<QTableWidgetSelectionRange> ranges = selectedRanges() ;
为啥这个函数只返回第一个节点( return ranges.first();)??
求解释!
QList<QTableWidgetSelectionRange>表示QList的元素是选定的区域, return ranges.first():表示返回第一个选定区域。
这里就可以理解”选择模式为QAbstractItemView::ContiguousSelection,所以选择范围不可能再超过1“这句话了。
因为QAbstractItemView::ContiguousSelection模式只能选定一个区域,所以return ranges.first()就够了
“选择范围不可能再超过1”改为“选择区域的个数不可能再超过1”就好理解多了
谢谢了,我已经懂了QAbstractItemView::ContiguousSelection在这个模式下选定的区域都可以变相的看作是一个整体,所以QList<QTableWidgetSelectionRange> ranges链表中只保存了一个对象。
#1
不要在意哪句话(我都没看懂
,也许书上写错了
),
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
#2
不要在意哪句话(我都没看懂 ,也许书上写错了 ),
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
嗯,但是我还有一个疑问,在这个函数中:
QTableWidgetSelectionRange Spreadsheet::selectedRange() const
{
QList<QTableWidgetSelectionRange> ranges = selectedRanges();
if (ranges.isEmpty())
return QTableWidgetSelectionRange();
return ranges.first();
}
QList<QTableWidgetSelectionRange> ranges = selectedRanges() ;
为啥这个函数只返回第一个节点( return ranges.first();)??
求解释!
#3
不要在意哪句话(我都没看懂 ,也许书上写错了 ),
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
嗯,但是我还有一个疑问,在这个函数中:
QTableWidgetSelectionRange Spreadsheet::selectedRange() const
{
QList<QTableWidgetSelectionRange> ranges = selectedRanges();
if (ranges.isEmpty())
return QTableWidgetSelectionRange();
return ranges.first();
}
QList<QTableWidgetSelectionRange> ranges = selectedRanges() ;
为啥这个函数只返回第一个节点( return ranges.first();)??
求解释!
QList<QTableWidgetSelectionRange>表示QList的元素是选定的区域, return ranges.first():表示返回第一个选定区域。
这里就可以理解”选择模式为QAbstractItemView::ContiguousSelection,所以选择范围不可能再超过1“这句话了。
因为QAbstractItemView::ContiguousSelection模式只能选定一个区域,所以return ranges.first()就够了
“选择范围不可能再超过1”改为“选择区域的个数不可能再超过1”就好理解多了
#4
不要在意哪句话(我都没看懂 ,也许书上写错了 ),
你只要理解QAbstractItemView::ContiguousSelection模式的含义就行了。
ContiguousSelection模式,通常情况下只选中一项,选择另一项时当前选中项则不再选中。但是也可以多选,按Shift键再去选就可以多选(这跟PC选中文件或文件夹方式一样的)。
if (range.rowCount() * range.columnCount() != 1 && (range.rowCount() != numRows || range.columnCount() != numColumns))
range.rowCount() * range.columnCount() != 1:表示你选择了多项,
range.rowCount() != numRows || range.columnCount() != numColumns:表示你选择多项的行数或列数,跟剪切板中的内容换算出来的行数或列数判断不相同
(可能剪切板中数据破坏,或者你说复制了其它内容等等)
满足上面条件的,是给出提示(QMessageBox::information)
嗯,但是我还有一个疑问,在这个函数中:
QTableWidgetSelectionRange Spreadsheet::selectedRange() const
{
QList<QTableWidgetSelectionRange> ranges = selectedRanges();
if (ranges.isEmpty())
return QTableWidgetSelectionRange();
return ranges.first();
}
QList<QTableWidgetSelectionRange> ranges = selectedRanges() ;
为啥这个函数只返回第一个节点( return ranges.first();)??
求解释!
QList<QTableWidgetSelectionRange>表示QList的元素是选定的区域, return ranges.first():表示返回第一个选定区域。
这里就可以理解”选择模式为QAbstractItemView::ContiguousSelection,所以选择范围不可能再超过1“这句话了。
因为QAbstractItemView::ContiguousSelection模式只能选定一个区域,所以return ranges.first()就够了
“选择范围不可能再超过1”改为“选择区域的个数不可能再超过1”就好理解多了
谢谢了,我已经懂了QAbstractItemView::ContiguousSelection在这个模式下选定的区域都可以变相的看作是一个整体,所以QList<QTableWidgetSelectionRange> ranges链表中只保存了一个对象。