Qt学习三 - 菜单栏工具栏状态栏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt学习三 - 菜单栏工具栏状态栏相关的知识,希望对你有一定的参考价值。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); /** QAction是Qt中用于添加动作的类, * 可以将它添加在菜单,作为一个菜单项,也可以添加到工具栏,作为一个工具栏按钮 * 其中参数一是设置该操作按钮的图标,":/images/icon"是资源文件的路径 * 参数二中"&"号代表设置快捷键为"Alt+o" */ QAction *open = new QAction(QIcon(":/images/icon"),"Open(&O)",this); /** * 设置快捷键为"Ctrl+o" * 这里使用QKeySequence类是为了可以跨平台,例如pc和mac下的键盘不一样,Qt可以根据平台不同设置相应的快捷键 * 该类中为我们定义了很多内置的快捷键,可以直接使用,例如下面注释的一行。 * 也可以自己创建一个QKeySequence类,传入我们想要设置的快捷键。 */ //open->setShortcut(QKeySequence(QKeySequence::Open)); open->setShortcut(QKeySequence("Ctrl+O")); //设置工具提示 open->setToolTip("open file"); //状态栏提示 open->setStatusTip("open existing file"); //在菜单栏中添加一个菜单。因为Qt界面工程,默认自带了菜单栏、工具栏和状态栏,所以我们可以直接使用ui->menuBar来调用 QMenu *file = ui->menuBar->addMenu("File(&F)"); //将open动作作为一个菜单项添加到file菜单中 file->addAction(open); //添加到工具栏 ui->mainToolBar->addAction(open); //创建状态栏,Qt界面工程已经创建 //statusBar(); }
状态栏可以显示临时信息、永久信息和其他组件,例如:
statusBar()->showMessage("欢迎!");
运行结果如下:
还可以设定显示时间,毫秒为单位,例如:
statusBar()->showMessage("欢迎!",2000);
这样信息会在2秒后消失。
下面在状态栏中显示一些组件,声明一个私有变量
namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QLabel *statusLabel; };
然后在构造函数中添加,如下代码
statusLabel = new QLabel(this); statusLabel->setFrameShape(QFrame::WinPanel); statusLabel->setFrameShadow(QFrame::Sunken); ui->statusBar->addWidget(statusLabel); statusLabel->setText("欢迎!!!");
运行如下:
这样就可以在需要显示信息的时候,调用statusLabel->setText()来设置了。
状态栏显示永久信息需要使用addPermanentWdget函数来添加一个可以显示信息的组建,它会显示在状态栏的右侧,不会被临时信息所遮盖。
QLabel *permanent = new QLabel; permanent->setFrameStyle(QFrame::Box | QFrame::Sunken); permanent->setText( tr("<a href=\\"http://www.baidu.com\\">baidu.com</a>")); permanent->setTextFormat(Qt::RichText); //设置为超文本 permanent->setOpenExternalLinks(true); //开启自动打开超链接 ui->statusBar->addPermanentWidget(permanent);
运行结果如下:
在Qt中,mainwindow类提供了menuBar()函数来返回一个菜单栏(QMenuBar),如果没有菜单栏则会新建一个;提供了addToolBar()函数来新加一个工具栏(QToolBar);以及返回状态栏(QStatusBar)的statusBar()函数。上面的代码没有使用这三个函数,是因为Qt界面工程默认已经创建好了。这三个函数仅在mainwindow类中存在,QDialog和QWidget等其他类中都没有提供这三个函数。那么如果我们需要在QDialog或者QWidget类中使用菜单栏、工具栏和状态栏时怎么办?QMenuBar,QToolBar,QStatusBar都继承自QWidget,所以我们可以像使用其他QWidget子类那样进行操作。例如:
QMenuBar *menuBar = new QMenuBar(this); QMenu *menu = menuBar->addMenu("&File"); QAction *open = new QAction("&Open1",this); open->setStatusTip("open exsiting file"); menu->addAction(open);
以上是关于Qt学习三 - 菜单栏工具栏状态栏的主要内容,如果未能解决你的问题,请参考以下文章