QStatusBar Class
QStatusBar类提供了一个适合于显示状态信息的水平条。
Header | #include < QStatusBar > |
---|---|
qmake | QT += widgets |
Inherits | QWidget |
Inherited By |
详细说明
每个状态指示分为三类:
- 临时-短暂占据状态栏的大部分。例如,用于解释工具提示文本或菜单项。
- 正常-占据部分状态栏,可能被临时消息隐藏。例如,用于在字处理器中显示页码和行号。
- 永久的-永远不会隐藏。用于重要的模式指示,例如,某些应用程序在状态栏中放置大写锁定指示器。
QStatusBar允许您显示所有三种类型的指示器。
通常,对状态栏功能的请求与QMainWindow对象相关。QMainWindow提供了一个主应用程序窗口,其中有一个菜单栏、工具栏、停靠小部件和一个围绕在大型中心小部件周围的状态栏。可以使用QMainWindow::statusBar() 函数检索状态栏,并使用QMainWindow::setStatusBar() 函数替换状态栏。
使用showMessage() 槽显示临时消息:
void MainWindow::createStatusBar()
{
statusBar()->showMessage(tr("Ready"));
}
要删除临时消息,请使用clearMessage() 槽,或在调用showMessage() 时设置时间限制。例如:
void MainWindow::print()
{
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QTextDocument *document = textEdit->document();
QPrinter printer;
QPrintDialog dlg(&printer, this);
if (dlg.exec() != QDialog::Accepted) {
return;
}
document->print(&printer);
statusBar()->showMessage(tr("Ready"), 2000);
#endif
}
使用currentMessage() 函数检索当前显示的临时消息。QStatusBar类还提供messageChanged() 信号,该信号在临时状态消息更改时发出。
通过创建一个小部件(QLabel、QProgressBar甚至QToolButton),然后使用addWidget() 或addPermanentWidget() 函数将其添加到状态栏,可以显示普通和永久消息。使用removeWidget() 函数从状态栏中删除此类消息。
statusBar()->addWidget(new MyReadWriteIndication);
默认情况下,QStatusBar在右下角提供QSizeGrip。可以使用setSizeGripeEnabled() 函数禁用它。使用isSizeGripEnabled() 函数确定尺寸夹点的当前状态。
属性
- sizeGripEnabled : bool 状态栏右下角的QSizeGrip是否已启用
默认情况下,“QSizeGrip”夹点处于启用状态。- QStatusBar(QWidget *parent = nullptr)
- virtual ~QStatusBar()
公共函数
构造和析构
- QStatusBar(QWidget *parent = nullptr)
- virtual ~QStatusBar()
属性相关
- bool isSizeGripEnabled() const
void setSizeGripEnabled(bool)
增删
-
void addPermanentWidget(QWidget *widget, int stretch = 0)
将给定的小部件永久添加到此状态栏中,如果该小部件不是该QStatusBar对象的子对象,则重新分配该小部件
stretch参数用于在状态栏增长和收缩时计算给定小部件的合适大小。默认的拉伸因子是0,即给小部件一个最小的空间。
永久意味着小部件可能不会被临时消息掩盖。它位于状态栏的最右边。
-
int insertPermanentWidget(int index, QWidget *widget, int stretch = 0)
-
void addWidget(QWidget *widget, int stretch = 0)
-
int insertWidget(int index, QWidget *widget, int stretch = 0)
小部件位于第一个永久小部件的最左侧(请参见addPermanentWidget()),可能会被临时消息遮挡。 -
void removeWidget(QWidget *widget)
当前信息
- QString currentMessage() const
公共槽
- void clearMessage()
- void showMessage(const QString &message, int timeout = 0)
信号
- void messageChanged(const QString &message)
受保护的函数
- void hideOrShow()
- void reformat()
重写的受保护的函数
- virtual bool event(QEvent *e) override
- virtual void paintEvent(QPaintEvent *event) override
- virtual void resizeEvent(QResizeEvent *e) override
- virtual void showEvent(QShowEvent *) override
演示代码
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationName ("QMainWindow");
QMainWindow w;
auto *label = new QLabel("PermanentWidget",&w);
label->setFrameStyle (QFrame::Panel | QFrame::Sunken );
label->setFrameStyle (QFrame::Panel | QFrame::Sunken );
w.statusBar ()->addPermanentWidget (label);
label = new QLabel("addWidget()",&w);
label->setFrameStyle (QFrame::Panel | QFrame::Sunken );
w.statusBar ()->addWidget (label);
w.statusBar ()->showMessage ("QMainWindow",1000);
w.resize (350,200);
w.show();
return a.exec();
}