Qt4_设置状态栏

设置状态栏

随着菜单和工具栏的完成,已经为设置Spreadsheet应用程序的状态栏做好了准备。在程序的普通模式下,状态栏包括两个状态指示器:当前单元格的位置和当前单元格中的公式。状态栏也用于显示状态提示和其他一些临时消息。见下图给出了各种情况下的状态栏。
在这里插入图片描述
在MainWindow 的构造函数中,调用createStatusBar()创建状态条:

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()));
    //在函数结尾的附近,把Spreadsheet的两个信号和MainWindow的两个槽, updateStatusBar()和spreadsheetModifed(),连接了起来。

    updateStatusBar();
    //该槽也可以作为一个普通函数而在createStatusBar()的最后用于初始化这些指示器。
    //因为Spreadsheet不会在一开始的时候就发射currentCellChanged()消息,所以还必需这样做。
}

void MainWindow::updateStatusBar()
{
    //updatestatusBar()槽可以更新单元格定位指示器和单元格公式指示器。
    //只要用户把单元格光标移动到一个新的单元格,这个槽就会得到调用。
    locationLabel->setText(spreadsheet->currentLocation());
    formulaLabel->setText(spreadsheet->currentFormula());
}

void MainWindow::spreadsheetModified()
{
    //spreadsheeModified()槽把windowModified属性设置为true,用以更新标题栏。
    //这个函数也会更新位置和公式指示器,以便可以让它们反映事件的当前状态。
    setWindowModified(true);
    updateStatusBar();
}

statusBar()
QMainWindow::statusBar()函数返回状态条的指针(和QMainWindow::menuBar()一样,状态条在第一次调用这个函数的时候创建)。状态条的指示控件是QLable,根据程序的状态改变显示的信息。我们给formulaLabel 设置了一个缩进,使它显示的信息离左边有一定的偏移。当QLabel 控件加到状态条上时,它们的父对象就自动变成了状态条。

statusBar()->addWidget(formulaLabel, 1);
单元格定位指示器只需要非常小的空间,并且在重新定义窗口大小时,任何多余的空间都会分配给位于右侧的单元格公式指示器。这是通过在公式标签的QStatusBar: : addWidget() 调用中指定一个伸展因子1 而实现的。位置指示器的默认伸展因子为0 ,这也就意味着它不喜欢被仲展。

QStatusBar 放置指示控件时,它首先查看控件的QWidget::sizeHint()得到控件的合适大小。然后托放那些可托放的控件填到其他可用的空间。一个控件的理想大小是控件自己根据它显示的内容决定的,当显示内容改变时,这个大小也会改变。为了避免频繁改变locationLabel 的大小,我们设置它的最小值为它可能显示的最大的文本(“W199”),对齐方式为水平居中对齐(Qt::AlignHCenter)。

在函数的最后,我们连接Spreadsheet 控件的信号到MainWindow 的槽函数:updataStatusBar()和spreadsheetModified()。

updataStatusBar()
updateStatusBar()更新位置和公式的显示。只要用户移动图标到一个新的单元格这个函数就会被调用。在createStatusBar()的最后它做为普通函数调用初始化状态条的显示,这样做是因为最开始Spreadsheet 不发送currentCellChanged()信号。

spreadsheetModified()
spreadsheetModified()槽函数设置windowModified 属性为true,用来更新窗口标题。然后调用updateStausBar()反映当前状态的变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值