@TOC
原文链接:https://blog.csdn.net/coologic/article/details/102968197
在QMainWindow最下方有状态栏QStatusBar,相关API:帮助
Qt主要将状态栏的信息分为五大类:
//将状态栏的所有item边框宽度设置为0
statusBar()->setStyleSheet(“QStatusBar::item{border: 0px}”);
其实上面已经整理了几乎所有的方法,剩余的方法比如removeWidget可以在插入了widget后再取出来,注意相关提示,remove本质是隐藏,并把widget的parent从状态栏转为null,若想要重新显示在状态栏需要重新add和show,注意还要show,因为被hide了。
Note: This function does not delete the widget but hides it. To add the widget again, you must call both the addWidget() and show() functions.
关于非永久信息的widget和永久信息PermanentWidget,实际上都是widget,可以做显示内容的修改,本质区别是,如果窗口小了,那PermanentWidget不会被showmessage的信息盖住
PermanentWidget在窗口最右侧开始排列、普通Widget在最左侧开始排列,他们会限制窗口的最小宽度为两者widget所有item的最小宽度值,也就是说无论左右排列均会永久显示在窗口中,不会因为窗口缩小而被遮挡。
showMessage会在最左侧直接显示,等于覆盖了普通的Widget,若窗口已经达到最小,则无论showMessage内容有多长,只会显示左侧Widget可用的长度的内容,范例如下:
Palmshop by TechieLiang为PermanentWidget,左侧绿色的为普通widege,乱大的字母为showmessage。范例代码如下:
//状态栏设置
//不显示其内控件的边框
statusBar()->setStyleSheet("QStatusBar::item{border: 0px}");
//永久部件
statusBar()->addPermanentWidget(new QLabel(kProgramName +
" by " + kProgramDeveloperName));
//临时部件
statusbar_state_label_ = new QLabel(this);
statusBar()->addWidget(statusbar_state_label_);
statusBar()->showMessage("kajsdlfkjalksdjfklsdjafjadsjflkads");
SetState("数据库登陆失败", false);
void MainWindow::SetState(const QString &text, bool is_good) {
QPalette pa;
if(is_good)
pa.setColor(QPalette::WindowText, Qt::green);
else
pa.setColor(QPalette::WindowText, Qt::red);
statusbar_state_label_->setPalette(pa);
statusbar_state_label_->setText(text);
}
获取状态栏指针,可以通过ui->XXXX获取,也可以直接在mainwindow中使用statusBar()获取指针,因为状态栏只会有一个。
第二个参数是毫秒显示时间,可以通过设置以后,Qt会显示指定时间后自动删除当前消息内容。若不设置,将会一直显示知道clear,或者当下一次调用show。
注意,每次调用show,会清理以前的message,所以不要抱有永久显示某条消息的目的使用showmessage(“XXXX”,0);
原文链接
Qt学习之状态栏
QStatusBar类提供一个水平条来显示状态信息。所谓状态信息,拿个简单的例子来说,当你在word中编辑时,左下角就会出现页面、字数等等信息。状态信息可以分为三类:临时信息,如一般的提示信息;正常信息,如页数;永久信息,如版本信息。QMainWindow中默认提供了一个状态栏。我们可以使用showMessage()来显示一个临时消息,它会出现在状态栏的最左边。我们一般用addWidget()将一个QLabel加到状态栏上用于显示正常信息,它会生成到状态栏的最左边,可能会被临时消息覆盖。我们使用addPermanentWidget()来添加一个QLabel来在状态栏的最右边显示永久信息。它不会被临时信息所掩盖。
在状态栏的最右端还有一个QSizeGrip部件用来调整窗口大小,我们可以通过setSizeGripEnabled()函数来禁用它。也许你想通过使用Qt Designer来可视化地完成窗口布局。但是事与愿违,目前的设计器还不支持直接向状态栏中拖放部件,所以我们就不能偷懒了,必须使用代码来设置了。下面程序为对状态栏的测试程序,只需要编辑mainwindow的构造函数如下:不要忘记应包含相应的头文件
状态栏显示的信息分3种
1. 一般信息,用QLabel 代表
2. 永久信息,文本会一直显示在状态栏的最右边。
3. 临时信息,指定信息现实的时间。时间到即信息消失
//QLabel *locationLabel;
locationLabel = new QLabel("July");
locationLabel->setAlignment(Qt::AlignCenter);
locationLabel->setMinimumSize(locationLabel->sizeHint());
//QLabel *aixLabel;
aixLabel = new QLabel("\"CTRL + H\" for help");
//Optional
statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}")); // 设置不显示label的边框
statusBar()->setSizeGripEnabled(false); //设置是否显示右边的大小控制点
statusBar()->addWidget(locationLabel);
statusBar()->addWidget(aixLabel, 1);
QLabel *per1 = new QLabel("Ready1", this);
QLabel *per2 = new QLabel("Ready2", this);
QLabel *per3 = new QLabel("Ready3", this);
statusBar()->addPermanentWidget(per1); //现实永久信息
statusBar()->addPermanentWidget(per2);
statusBar()->insertPermanentWidget(2, per3);
statusBar()->showMessage("Status is here...", 3000); // 显示临时信息,时间3秒钟.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// QLabel *normal=new QLabel("正常信息",this);
// ui->statusBar->addWidget(normal);//显示正常信息
ui->statusBar->setSizeGripEnabled(false);//去掉状态栏右下角的三角
ui->statusBar->showMessage(tr("临时信息!"),2000);//显示临时信息2000ms 前面的正常信息被覆盖 当去掉后一项时,会一直显示
QLabel *permanent=new QLabel(this);
permanent->setFrameStyle(QFrame::Box|QFrame::Sunken);
permanent->setText(tr("永久信息"));
permanent->setOpenExternalLinks(true);//设置可以打开网站链接
ui->statusBar->addPermanentWidget(permanent);//显示永久信息
}