statusBar伸缩因子、selectedRanges()

本文介绍了QTableWidget中QTableWidgetSelectionRange类的使用,用于存储选中单元格的坐标。同时展示了如何设置状态栏的伸缩因子,以及在文件操作中读写Spreadsheet文件的过程,包括数据的序列化和反序列化。此外,还涵盖了对表格数据进行排序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

QTableWidgetSelectionRange  QTableWidget::selectedRanges()

 

QTableWidgetSelectionRange 类存储了选中单元格的左上、右下单元格的行列值。

 

 

formulaLabel->setIndent(3);  // 缩进

 

statusBar()->addWidget(locationLabel);    // 伸缩因子0,意味着不喜欢被拉伸。

statusBar()->addWidget(formulaLabel, 1);  // 伸缩因子1,窗体size 改变时被扩展

 

 

QApplication::setOverrideCursor(Qt::WaitCursor);

QApplication::restoreOverrideCursor();

 

 

return static_cast<Cell *>(item(row, column));  // QTableWidget::item()

 

 

int r = QMessageBox::warning(this, tr("Spreadsheet"),

                             tr("The document has been modified./n"

                             "Do you want to save your changes?"),

                             QMessageBox::Yes | QMessageBox::Default,

                             QMessageBox::No,

                             QMessageBox::Cancel | QMessageBox::Escape);

 

 

bool Spreadsheet::readFile(const QString &fileName)

{

    QFile file(fileName);

    if (!file.open(QIODevice::ReadOnly)) {

        QMessageBox::warning(this, tr("Spreadsheet"),

            tr("Cannot read file %1:/n%2.")

            .arg(file.fileName())

            .arg(file.errorString()));

        return false;

    }

 

    QDataStream in(&file);

    in.setVersion(QDataStream::Qt_4_1);

 

    quint32 magic;

    in >> magic;

    if (magic != MagicNumber) {

        QMessageBox::warning(this, tr("Spreadsheet"),

            tr("The file is not a Spreadsheet file."));

        return false;

    }

 

    clear();

 

    quint16 row;

    quint16 column;

    QString str;

 

    QApplication::setOverrideCursor(Qt::WaitCursor);

    while (!in.atEnd()) {

        in >> row >> column >> str;

        setFormula(row, column, str);

    }

    QApplication::restoreOverrideCursor();

    return true;

}

 

 

bool Spreadsheet::writeFile(const QString &fileName)

{

    QFile file(fileName);

    if (!file.open(QIODevice::WriteOnly)) {

        QMessageBox::warning(this, tr("Spreadsheet"),

            tr("Cannot write file %1:/n%2.")

            .arg(file.fileName())

            .arg(file.errorString()));

        return false;

    }

 

    QDataStream out(&file);

    out.setVersion(QDataStream::Qt_4_1);

 

    out << quint32(MagicNumber);

 

    QApplication::setOverrideCursor(Qt::WaitCursor);

    for (int row = 0; row < RowCount; ++row) {

        for (int column = 0; column < ColumnCount; ++column) {

            QString str = formula(row, column);

            if (!str.isEmpty())

                out << quint16(row) << quint16(column) << str;

        }

    }

    QApplication::restoreOverrideCursor();

    return true;

}

 

 

 

 

 

QTableWidgetSelectionRange Spreadsheet::selectedRange() const

{

    QList<QTableWidgetSelectionRange> ranges = selectedRanges();

    if (ranges.isEmpty())

        return QTableWidgetSelectionRange();

    return ranges.first();

}

 

 

void Spreadsheet::sort(const SpreadsheetCompare &compare)

{

    QList<QStringList> rows;

    QTableWidgetSelectionRange range = selectedRange();

    int i;

 

    for (i = 0; i < range.rowCount(); ++i) {

        QStringList row;

        for (int j = 0; j < range.columnCount(); ++j)

            row.append(formula(range.topRow() + i,

            range.leftColumn() + j));

        rows.append(row);

    }

 

    qStableSort(rows.begin(), rows.end(), compare);

 

    for (i = 0; i < range.rowCount(); ++i) {

        for (int j = 0; j < range.columnCount(); ++j)

            setFormula(range.topRow() + i, range.leftColumn() + j,

            rows[i][j]);

    }

 

    clearSelection();

    somethingChanged();

}

 

 

QTableWidget::selectedRanges()

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值