【QT】QT菜单栏、状态栏、工具栏
生活随笔
收集整理的這篇文章主要介紹了
【QT】QT菜单栏、状态栏、工具栏
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
菜單欄、工具欄、狀態(tài)欄
主窗口框架(QMainWindow)擁有自己的布局,包括以下組件:
- 菜單欄
菜單欄包含了一個下拉菜單項的列表,這些菜單項通過QAction動作類實現(xiàn)。一個主窗口只能有一個菜單欄。
- 工具欄
工具欄一般用于常用的菜單項,也可以插入其他窗口部件,一個主窗口可以擁有多個工具欄。
- 中心部件
主窗口中心區(qū)域可以放入一個窗口部件作為中心部件,是應(yīng)用程序的主要功能實現(xiàn)區(qū)域,一個主窗口只能有一個中心部件。
- dock部件
dock部件又稱為停靠部件,或停靠窗口,可停靠在窗口部件的四周,用來設(shè)置一些部件來實現(xiàn)一些功能,類似一個工具箱,一個主窗口可擁有多個dock部件。
- 狀態(tài)欄
狀態(tài)欄用于顯示程序的一些狀態(tài)信息,在主窗口的最底下,一個主窗口只能擁有一個狀態(tài)欄。
菜單欄、工具欄、狀態(tài)欄
代碼添加示例。
//菜單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)");//設(shè)置可選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);//設(shè)置模式為彈出式菜單toolBtn->setPopupMode(QToolButton::MenuButtonPopup);ui->mainToolBar->addWidget(toolBtn);//添加調(diào)節(jié)大小窗口QSpinBox* spinBox = new QSpinBox(this);ui->mainToolBar->addWidget(spinBox);//顯示臨時信息ui->statusBar->showMessage(QString("歡迎......"),3000);//添加狀態(tài)欄永久顯示QLabel* tag = new QLabel("https://doraemon-hub-art.github.io");ui->statusBar->addPermanentWidget(tag);自定義菜單欄
自定義菜單需要定義一個繼承QWidgetAction的類, 并重寫createWidget方法,在該方法中自定義部件設(shè)置。
示例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_HMyAction.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) {//是否繼承自菜單或者工具欄//是則創(chuàng)建父部件的子部件并返回子部件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(); }總結(jié)
以上是生活随笔為你收集整理的【QT】QT菜单栏、状态栏、工具栏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录:微信小程序Switch样式调整
- 下一篇: centos 安装安全狗