欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

【QT】QT菜单栏、状态栏、工具栏

发布时间:2023/12/15 c/c++ 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【QT】QT菜单栏、状态栏、工具栏 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

菜单栏、工具栏、状态栏

主窗口框架(QMainWindow)拥有自己的布局,包括以下组件:

  • 菜单栏

菜单栏包含了一个下拉菜单项的列表,这些菜单项通过QAction动作类实现。一个主窗口只能有一个菜单栏。

  • 工具栏

工具栏一般用于常用的菜单项,也可以插入其他窗口部件,一个主窗口可以拥有多个工具栏。

  • 中心部件

主窗口中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域,一个主窗口只能有一个中心部件。

  • dock部件

dock部件又称为停靠部件,或停靠窗口,可停靠在窗口部件的四周,用来设置一些部件来实现一些功能,类似一个工具箱,一个主窗口可拥有多个dock部件。

  • 状态栏

状态栏用于显示程序的一些状态信息,在主窗口的最底下,一个主窗口只能拥有一个状态栏。

菜单栏、工具栏、状态栏

代码添加示例。

//菜单QMenu* editMenu = ui->menuBar->addMenu("编辑(&E)");QAction *action_copy = editMenu->addAction(QIcon("test.png"),QString("复制(&C)"));action_copy->setShortcut(QKeySequence("Ctrl+C"));//添加到主窗口工具栏——工具栏添加动作按钮ui->mainToolBar->addAction(action_copy);//动作按钮组,互斥选项,只能选择这其中的一个QActionGroup* group = new QActionGroup(this);QAction* action_L = group->addAction("左对齐(&L)");QAction* action_R = group->addAction("右对齐(&R)");QAction* action_C = group->addAction("居中对齐(&C)");QAction* action_J = group->addAction("两端对齐(&J)");//设置可选action_L->setCheckable(true);action_R->setCheckable(true);action_C->setCheckable(true);action_J->setCheckable(true);//菜单栏中添加分隔线editMenu->addSeparator();//添加到窗口菜单editMenu->addAction(action_L);editMenu->addAction(action_R);editMenu->addAction(action_C);editMenu->addAction(action_J);// 工具栏添加部件QToolButton* toolBtn = new QToolButton(this);toolBtn->setText("颜色");QMenu* colorMenu = new QMenu(this);colorMenu->addAction("红色");colorMenu->addAction("绿色");toolBtn->setMenu(colorMenu);//设置模式为弹出式菜单toolBtn->setPopupMode(QToolButton::MenuButtonPopup);ui->mainToolBar->addWidget(toolBtn);//添加调节大小窗口QSpinBox* spinBox = new QSpinBox(this);ui->mainToolBar->addWidget(spinBox);//显示临时信息ui->statusBar->showMessage(QString("欢迎......"),3000);//添加状态栏永久显示QLabel* tag = new QLabel("https://doraemon-hub-art.github.io");ui->statusBar->addPermanentWidget(tag);

自定义菜单栏

自定义菜单需要定义一个继承QWidgetAction的类, 并重写createWidget方法,在该方法中自定义部件设置。

示例MyAction.h

#ifndef MYACTION_H #define MYACTION_H #include<QWidgetAction> #include<QLineEdit>class MyAction : public QWidgetAction {Q_OBJECT public:MyAction(QObject* parent = 0); protected:QWidget* createWidget(QWidget* parent); signals:void getText(const QString& string); private slots:void sendText(); private:QLineEdit* lineEdit; };#endif // MYACTION_H

MyAction.cpp

#include "myaction.h" #include<QSplitter> #include<QLabel> MyAction::MyAction(QObject* parent):QWidgetAction(parent) {lineEdit = new QLineEdit;connect(lineEdit,&QLineEdit::returnPressed,this,&MyAction::sendText); }QWidget *MyAction::createWidget(QWidget *parent) {//是否继承自菜单或者工具栏//是则创建父部件的子部件并返回子部件if(parent->inherits("QMenu")||parent->inherits("QToolBar")){QSplitter * splitter = new QSplitter(parent);QLabel* label = new QLabel("插入文本:");splitter->addWidget(label);splitter->addWidget(lineEdit);return splitter;} } void MyAction::sendText() {emit getText(lineEdit->text());lineEdit->clear(); }

总结

以上是生活随笔为你收集整理的【QT】QT菜单栏、状态栏、工具栏的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。