(转)3.3设置状态栏(Setting Up the Status Bar)

本文介绍了Spreadsheet应用程序状态栏的设计思路与实现方法,包括如何使用QLabel展示单元格位置和公式,以及如何通过信号与槽机制更新这些信息。

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

Spreadsheet应用程序的状态栏通常有两个指示符:一是当前单元位置,二是当前单元规则。状态栏也用于显示状态提示及其它临时消息。

void MainWindow::createStatusBar()
{
    locationLabel = new QLabel(" W999 ");
    locationLabel->setAlignment(Qt::AlignHCenter);
    locationLabel->setMinimumSize(locationLabel->sizeHint());
    formulaLabel = new QLabel;
    formulaLabel->setIndent(3);
    statusBar()->addWidget(locationLabel);
    statusBar()->addWidget(formulaLabel, 1);
    connect(spreadsheet, SIGNAL(currentCellChanged(int, int, int, int)),
            this, SLOT(updateStatusBar()));
    connect(spreadsheet, SIGNAL(modified()),
            this, SLOT(spreadsheetModified()));
    updateStatusBar();
}

QMainWindow::statusBar() 函数返回指向一个状态栏的指针(在第一次调用statusBar() 函数时就创建了状态栏)。状态栏的指示符是QLabel,必要时可对它的文本作改变。为formulaLabel添加缩进(Indent),可以使其显示的文本能从左边起有缩进。当QLabel被加到状态栏时,它们就自动成为了状态栏的孩子。

通过formulaLabel的QStatusBar::addWidget()调用中,指定伸展因子为1,可以实现当窗口大小变化时,伸展的空间仅在右边的单元规则指示符栏。而 locationLabel 的默认伸展因子为0,表明保持不变,不伸展。 

QStatusBar排列指示符控件时,是根据由QWidget::sizeHint() 获得的每个控件的理想大小进行布局的,并且伸展可被伸展的控件来填充可用空间。而控件的理想大小是依赖控件的内容并根据内容的变化而改变,为避免不断的变化,我们可以设置最小大小来确保最大文本("W999")的足够宽度。

最后,将槽updateStatusBar() 作为普通函数调用来初始化指示符,因为Spreadsheet在启动时并没发出currentCellChanged() 信号。 

void MainWindow::updateStatusBar()
{
    locationLabel->setText(spreadsheet->currentLocation());
    formulaLabel->setText(spreadsheet->currentFormula());
}

void MainWindow::spreadsheetModified()
{
    setWindowModified(true);
    updateStatusBar();
}

spreadsheetModified() 槽设置windowModified属性为真,更新标题栏,同时也更新状态栏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值