精华内容
下载资源
问答
  • Qt知识点梳理 —— 代码实现菜单栏工具栏;对应文章:https://lizhifun.blog.csdn.net/article/details/112973533
  • QT实现任务栏按钮

    2015-10-08 11:07:49
    酷狗音乐播放那种,在任务栏预览视图可以出现按钮。我看了官方的代码,感觉没啥区别啊,为什么运行不出来。特来请教万能的CSDN大神! 这个是我的代码: [img=...
  • Qt代码实现菜单栏、工具栏、状态栏

    千次阅读 热门讨论 2019-04-23 22:02:23
    在QWidget中实现菜单栏、工具栏、状态栏 其他 子窗口获取父窗口指针 QWidget阻塞模式 本篇演示的例子是在QMainWindow中进行的,在QWidget中可采取另外的方法,在文末会涉及。 菜单栏 步骤:创建菜单栏->...

    目录

    菜单栏

    工具栏 

    状态栏

    总体效果

    在QWidget中实现菜单栏、工具栏、状态栏 

    其他

    子窗口获取父窗口指针

    QWidget阻塞模式


    本篇演示的例子是在QMainWindow中进行的,在QWidget中可采取另外的方法,在文末会涉及。

    菜单栏

    步骤:创建菜单栏->创建菜单项->创建子项(动作QAction)->(QAction设置图片->QAction设置快捷键->)将子项添加到菜单项->将菜单项添加到菜单栏

    其中设置图片时要先将图片加载到qrc中,如果图片较多可以单独创建一个文件夹。

     代码:

    QMenuBar pMenuBar = menuBar();
    	
    //菜单-文件
    QMenu *pMenuBarFile= new QMenu(QStringLiteral("文件(&F)"));
    QAction *pActionOpen = new QAction(QStringLiteral("打开"), this);
    pActionOpen->setIcon(QIcon(":/ReplicationTool/png/open.png"));
    pActionOpen->setShortcut(Qt::CTRL | Qt::Key_O);
    pMenuBarFile->addAction(pActionOpen);
    
    pMenuBar->addMenu(pMenuBarFile);
    
    //...
    //继续添加其他菜单项

    效果:

    工具栏 

    要实现带图片的工具栏图标,并且文字要显示图标下面,我们选择使用QToolButton。如果使用QAction则图片和文字只能显示一个。用QAction的步骤与创建菜单栏的一致。

    步骤:创建工具栏->创建工具栏按钮->添加图片->设置文字->设置图片与文字的位置->将工具栏按钮放进工具栏

    代码:

    QToolBar pToolBar = addToolBar("toolBar");
    
    QToolButton *pActionOpenBar = new QToolButton(this);
    pActionOpenBar->setIcon(QIcon(":/ReplicationTool/png/open.png"));
    pActionOpenBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    pActionOpenBar->setText(QStringLiteral("打开"));
    pToolBar->addWidget(pActionOpenBar);
    
    //添加其他按钮...
    //添加分隔符
    pToolBar->addSeparator();

     效果:

    另外设置图片大小:

    pActionOpenBar->setIconSize(QSize(50, 50));

    状态栏

    步骤:创建状态栏->创建需要往上面添加的控件->将控件添加到状态栏

    下面创建一个状态栏,上面显示系统状态、进度条和系统时间。

    代码:

    QStatusBar *pStatusBar = statusBar();
    
    QLabel *pWelCome = new QLabel(QStringLiteral("  就绪"));
    pStatusBar->addWidget(pWelCome);
    
    QProgressBar * pProgressBar = new QProgressBar();
    pProgressBar->setRange(0,100);
    pProgressBar->setValue(20);
    pProgressBar->setMaximumWidth(200);
    pStatusBar->addPermanentWidget(pProgressBar);
    pTimeLabel = new QLabel();
    pStatusBar->addPermanentWidget(pTimeLabel);
    
    QTimer *pTimer = new QTimer(this);
    timeUpdate_Slot();
    pTimer->start(1000); 
    connect(pTimer, SIGNAL(timeout()),this,SLOT(timeUpdate_Slot()));
    
    //更新时间的槽函数中的代码
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeStr = currentTime.toString(QStringLiteral("yyyy年MM月dd日 hh:mm:ss"));
    
    pTimeLabel->setText(timeStr);

    效果:

    总体效果

    再加上两个悬浮窗口 ,就可以组成一个经典软件界面。

     

    在QWidget中实现菜单栏、工具栏、状态栏 

    由于Qwidget没有menuBar(),addToolBar(),statusBar(),因此我们创建好后要给他指定位置。

    一个好的方法就是先在界面上拖几个QFrame到指定位置,分别放菜单栏、工具栏、状态栏 ,如下

    拖进去后适当调整一下高度,长可以在代码中调整。 

    然后分别以对应的QFrame为父窗口new出菜单栏、工具栏、状态栏对象,下面以菜单栏为例:

    //将菜单放入QFrame并设置与界面等宽
    ui.frameMenu->resize(this->geometry().width(), ui.frameMenu->height());
    QMenuBar *pMenuBar = new QMenuBar(ui.frameMenu);
    pMenuBar->setFixedSize(ui.frameMenu->width(), ui.frameMenu->height());
    
    //剩下操作与QMainWindow中一致
    //略...

    其他

    子窗口获取父窗口指针

    可采取如下安全强制转换的方式 

    MainDlg *pMainDlg = qobject_cast<MainDlg*>(this->parentWidget());

    然后再通过指针去调用父窗口方法,但该方法必须为public的。

    或者直接发信号给父窗口,让父窗口去调用其方法。

    QWidget阻塞模式

    QDialog可以直接用exec(),而QWidget的show()是非阻塞的。

    解决方案是:

    假设要在WidgetA中弹出阻塞的WidgetB,则

    1 在WidgetA中创建WidgetB时以WidgetA为父窗口

    2 在WidgetB的构造函数里设置相关属性

    代码:

    //widgeta.cpp
    WidgetB *pWidgetB = new WidgetB(this);
    pWidgetB->show();
    
    //widgetb.cpp
    WidgetB::WidgetB(QWidget *parent)
    	: QWidget(parent)
    {
    	ui.setupUi(this);
    	this->setWindowFlags(Qt::Dialog);
    	this->setWindowModality(Qt::WindowModal);
        
        //...
    }

     

    展开全文
  • Qt实现任务栏中的托盘图标的功能.

    千次阅读 2017-11-29 19:03:35
    会发现有一些软件被关闭后,还会继续存在任务栏中,当点击任务栏中的图标时,又会跳出来这个软件的画面,主要用到了Qt中的QSystemTrayIcon这个类,下面我们来简单的展示下实现的方法://"c.cpp"的代码: #include "c.h...

    看我们电脑最下面一行的任务栏,会发现有一些软件被关闭后,还会继续存在任务栏中,当点击任务栏中的图标时,又会跳出来这个软件的画面,主要用到了Qt中的QSystemTrayIcon这个类,下面我们来简单的展示下实现的方法:

    //"c.cpp"的代码:
    #include "c.h"
    c::c(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
        //创建一个菜单,只包含一个quit菜单项.
        m_menu = new QMenu;
        m_quitAction = new QAction("quit", this);
        m_menu->addAction(m_quitAction);
        //创建一个QSyStemTrayIcon的对象.
        m_trayIcon = new QSystemTrayIcon();
        //设置图标.
        m_trayIcon->setIcon(QIcon("tray.ico"));
        //设置右键菜单.
        m_trayIcon->setContextMenu(m_menu);
        m_trayIcon->show();
        //设置提示.
        m_trayIcon->setToolTip("click me~!");
        //设置显示一个messageBox3秒.
        m_trayIcon->showMessage(QString::fromLocal8Bit("成功"), QString::fromLocal8Bit("您已成功连接到网络!"),QSystemTrayIcon::Information,3);
    
        //这个是对于托盘图标的触摸事件,当被单击,双击等时发出信号.
        connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconTouchSlot(QSystemTrayIcon::ActivationReason)));
        //当点击图标上面的messageBox时发出信号.这里只是用来演示这个信号.
        connect(m_trayIcon, SIGNAL(messageClicked()), this, SLOT(messageClickedSlot()));
        //对图标右键产生的菜单的quit菜单项做出操作.
        connect(m_quitAction, SIGNAL(triggered()),this, SLOT(quitActionSlot()));
    }
    c::~c()
    {
    
    }
    void c::trayIconTouchSlot(QSystemTrayIcon::ActivationReason type)
    {
        //判断用户对图标触摸的类型.是双击,还是点击,还是右击等等.
        switch (type)
        {
        case QSystemTrayIcon::Trigger:
        case QSystemTrayIcon::DoubleClick:
            //正常模式显示.
            this->showNormal();
            //当前窗口显示为顶级窗口,如果没有这条语句的话,窗口就可能会出现在底层,被别的页面层覆盖而看不到了.
            this->activateWindow();
            break;
        default:
            break;
        }
    }
    void c::messageClickedSlot()
    {
        QMessageBox::information(this, "clicked", "clicked!");
    }
    void c::closeEvent(QCloseEvent *event)
    {
        //当我们点击右上角的X时,有些软件只是想把软件最小化,还是可以通过任务栏的图标来显示窗口的.
        this->setVisible(false);
        //对关闭事件做出一个反应.
        event->ignore();
    }
    void c::quitActionSlot()
    {
        //关闭程序.
        QApplication::exit(-1);
    }

    下面是”c.h”头文件的代码:

    #ifndef C_H
    #define C_H
    
    #include <QtWidgets/QMainWindow>
    #include "ui_c.h"
    #include <QSystemTrayIcon>
    #include <QAction>
    #include <QMenu>
    #include <QMessageBox>
    #include <QCloseEvent>
    #include <QMouseEvent>
    
    class c : public QMainWindow
    {
        Q_OBJECT
    
    public:
        c(QWidget *parent = 0);
        ~c();
    private slots:
        void trayIconTouchSlot(QSystemTrayIcon::ActivationReason type);
        void messageClickedSlot();
        void quitActionSlot();
    protected:
        void closeEvent(QCloseEvent *event);
    private:
        Ui::cClass ui;
        QSystemTrayIcon *m_trayIcon;
        QMenu *m_menu;
        QAction *m_quitAction;
    };
    
    #endif // C_H
    展开全文
  • Qt实现菜单栏,工具栏,状态栏

    万次阅读 2016-03-30 14:29:35
    1.菜单1.设计模式点击 在这里输入 输入完毕后直接回车即可 同样子菜单也是同样操作。 如果我们想给菜单设置ICON,可以如下操作: 在File下新建一个Open子菜单,现在想给Open子菜单添加Icon图标。选中子菜单...

    1.菜单栏

    1.设计模式

    点击 在这里输入 输入完毕后直接回车即可
    这里写图片描述
    同样子菜单也是同样操作。
    如果我们想给菜单设置ICON,可以如下操作:
    在File下新建一个Open子菜单,现在想给Open子菜单添加Icon图标。选中子菜单Open,在Open子菜单对应的QAction属性中可以设置icon
    这里写图片描述
    点击icon后的下三角,可以发现有两个选择,一个是选择文件,另一个是选择资源。
    a)选择文件:
    我们点击选择文件,然后选中相应的icon,这时我们在设计模式下,是能正常看到此图标在菜单显示了
    这里写图片描述
    然后在qt Creator里清除->构建->执行Qmake,然后运行即可。
    这里写图片描述

    b)选择资源:
    我们先来创建资源文件。右击工程项目->添加新文件,
    这里写图片描述
    选择Qt->Qt Resource File,然后点击choose
    这里写图片描述
    在弹出的窗口里,给新资源文件命名:menu_icon
    这里写图片描述
    在项目里就能看见多了一个资源文件
    这里写图片描述
    然后右击资源文件名menu_icon.qrc,添加现有文件,把我们想要的icon加进来。
    这里写图片描述
    剩下的操作就是步骤a)中设置QAction的icon属性了,这时就是选择资源文件了,这里写图片描述
    比如选择Document,然后重新构建,运行即可。

    2.代码模式

    当然,除了设计模式来实现菜单外,也可以直接使用代码来实现菜单
    比如,下图是设计模式中实现的菜单
    这里写图片描述
    这时我们来通过代码实现一个主菜单和子菜单

    //新增主菜单
    QMenu* menu = ui->menuBar->addMenu(tr("CodeMenu"));
    //创建子菜单
    QAction* subCodeMenuAction = new QAction(tr("subCodeMenu"),this);
    //给子菜单加icon图标
    subCodeMenuAction->setIcon(QIcon(tr("res/24x24/loop.png")));
    //把子菜单和父菜单关联
    menu->addAction(subCodeMenuAction);
    //添加信号槽
    //connect(subCodeMenuAction,SIGNAL(triggered(bool)),this,SLOT(clickSubCodeMenuAction));

    这就是添加代码之后的运行效果。
    这里写图片描述

    2.工具栏

    a)准备工作,我们现在工程中新增一个资源文件为9.png,后面用
    b)我们在Action Editor中点击新建Action
    这里写图片描述

    这里写图片描述
    命名和选择图标后点击确定。
    这时我们在Action Editor中看见多了一个Action
    这里写图片描述
    这时可以直接用鼠标把它拖到工具栏上。
    保存后运行,我们就可以看到已经添加到工具栏上了。
    这里写图片描述

    c)代码实现
    在我们上面的步骤a,b中实现工具栏的时候,我们就明白了,其实就是增加QAction,那么我们的代码实现也一样,就是把新增的QAction和工具栏关联起来就可以了

        //新增QAction
        QAction* newItemToolBar = new QAction(tr("newItem"),this);
        //给QAction加icon图标
        newItemToolBar->setIcon(QIcon(tr("res/24x24/8.png")));
        //把QAction和工具栏关联
        ui->mainToolBar->addAction(newItemToolBar);

    然后运行,我们看下结果。
    这里写图片描述

    这里工具栏上的8就是我们通过代码实现的。

    3.状态栏
    状态栏的实现就很简单了,直接贴代码了。

        QLabel* label1 = new QLabel(tr("Label1"),this);
        QLabel* label2 = new QLabel(tr("Label2"),this);
        QLabel* label3 = new QLabel(tr("Label3"),this);
        QLabel* label4 = new QLabel(tr("Label4"),this);
        ui->statusBar->addWidget(label1,1);
        ui->statusBar->addWidget(label2,1);
        ui->statusBar->addWidget(label3,1);
        ui->statusBar->addWidget(label4,1);

    然后我们看下运行结果
    这里写图片描述

    展开全文
  • m_ToolBar->setAllowedAreas(Qt::TopToolBarArea); QCalendarWidget* pCalendar = new QCalendarWidget; this->addToolBar(m_ToolBar); this->setCentralWidget(pCalendar); } #include "Menu.h" #include int main...
    #ifndef MENU_H
    #define MENU_H
    
    #include <QMainWindow>
    #include <QMenu>
    #include <QMenuBar>
    #include <QToolBar>
    
    class Menu : public QMainWindow
    {
        Q_OBJECT
    
    public:
        Menu(QWidget *parent = nullptr);
        ~Menu();
        void initMenu();
    private:
        QMenuBar* m_pBar;
        QToolBar* m_ToolBar;
    };
    #endif // MENU_H
    
    
    
    #include "Menu.h"
    #include <QTime>
    #include <QCalendarWidget>
    #include <QVBoxLayout>
    
    Menu::Menu(QWidget *parent)
        : QMainWindow(parent)
    {
        initMenu();
        this->resize(300,400);
    }
    
    Menu::~Menu()
    {
    }
    
    void Menu::initMenu()
    {
        QAction* pActionNew = new QAction("new file");
        pActionNew->setShortcut(QKeySequence::New);
        pActionNew->setIcon(QIcon(""));
    
        QAction* pActionOpen = new QAction("open file");
        pActionOpen->setShortcut(QKeySequence::Open);
        pActionOpen->setIcon(QIcon(""));
    
        QAction* pActionSave = new QAction("Save file");
        pActionSave->setShortcut(QKeySequence::Save);
        pActionSave->setIcon(QIcon(""));
    
        QMenu* pMenuFile = new QMenu("File");
        pMenuFile->addAction(pActionNew);
        pMenuFile->addAction(pActionOpen);
        pMenuFile->addAction(pActionSave);
    
        QMenu* pMenuHelp = new QMenu("Help");
        QAction* pActionHelp = new QAction("Help");
        pMenuHelp->addAction(pActionHelp);
    
    
        m_pBar = new QMenuBar;
        m_pBar->addMenu(pMenuFile);
        m_pBar->addMenu(pMenuHelp);
        m_pBar->addSeparator();
    
        m_ToolBar = new QToolBar;
        m_ToolBar->addWidget(m_pBar);
        m_ToolBar->addSeparator();
        m_ToolBar->setAllowedAreas(Qt::TopToolBarArea);
        QCalendarWidget* pCalendar = new QCalendarWidget;
    
        this->addToolBar(m_ToolBar);
        this->setCentralWidget(pCalendar);
    }
    
    
    
    #include "Menu.h"
    
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Menu w;
        w.show();
        return a.exec();
    }
    
    

    下面是运行界面

     

    展开全文
  • 在用Qt开发应用程序时,我们也可以实现“程序托盘”。 Qt提供的系统托盘类QSystemTrayIcon,可以看看Qt助手的解释。 QSystemTrayIcon类为系统托盘中的应用程序提供一个图标。 操作系统通常在桌面上提供一个...
  • QT代码实现菜单、工具栏

    千次阅读 2018-06-25 17:24:18
    QT的基本程序框架很简单,可以用纯代码实现窗口的菜单和工具栏代码参考[本人github仓库](https://github.com/thrillerqin)。
  • 在前面学习Qt的时候,我完成了关于界面按钮的创建,以及信号与槽的实际应用,这次来自己用代码实现在一个窗口中建立菜单栏,工具栏以及状态栏 一、建立菜单栏 1.新建工程 按照箭头所指来操作 这里名字随便取 这....
  • Qt菜单工具栏状态栏menuToolbarStatusBar 由于工程在Linux下编写,若在Windows下编译报错,请删除代码中的中文注释即可
  • 23333 有一阵子没写博客了,研究了挺长时间qt,学到任务栏托盘时简直无语,网上找得到的代码大多是废码,Qt5不支持或者本身就有毛病不能实现却被n多人转来转去的,甚是无语。 简单托盘功能以下在Qt5.5编译通过: ...
  • Qt Designer里会生成如图所示的几个文件: 此时我们右键删除imageviewer.ui这个文件,因为我们本次是用纯代码的方式生成界面,所以不需要这个ui文件了。 关键代码主要在imageviewer.h和imageviewer.cpp里。...
  • #ifndef IMAGEVIEWER_H #define IMAGEVIEWER_H #include <QMainWindow> #include <QLabel> #include <QScrollArea> #include <... void aboutQt(); }; #endif // IMAGEVIEWER_H
  • 使用action可以创建菜单项,工具栏按钮,也可以设置QToolButton按钮的关联action,点击这些action创建的菜单项,按钮就执行action的槽函数。 1.资源文件创建,即等会action要用到的图标图片,点击File->new File ...
  • 本篇博客介绍如何在Qt窗体上添加工具栏。 用QtCreator新建一个GUI项目,继承于QMainWindow, 只有QMainWindow有工具栏。例如我实现的效果如下: 工具栏按钮需要图片,可以新建一个qrc文件,把图片信息写进去,...
  • Qt创建任务栏进度条

    2018-12-13 16:29:00
    Qt中使用任务栏进度条也是非常容易的一件事情。Qt框架针对Windows提供了一个单独的模块WinExtras。这个模块中提供了一些类库和函数,用于实现Windows上特有的功能,如类型转换、句柄操作、窗口属性设置等。当然也...
  • 这里写自定义目录标题欢迎使用Markdown编辑器QT的菜单栏menuBar和 工具栏ToolBar一、什么是菜单二、菜单栏代码1.创建一个菜单栏对象2.创建一个菜单栏选择对象并且添加菜单动作二、工具栏1.创建一个工具栏对象2. 工具...
  • QT 自定义工具栏

    千次阅读 2018-08-29 16:32:46
    QToolBar类包含函数addWidget(QWidget *widget)和insertWidget(QAction *before, QWidget *widget),说明工具栏不仅可以addAction,还可以添加已有的或者自定义的widget,这样的话,做成类似word的工具栏就指日可待...
  • Qt任务栏使程序最小化

    千次阅读 2016-08-06 19:57:19
    点击任务栏图标,可以使窗口最小化,只需添加如下代码: setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);//任务栏使程序最小化 实现无边框,窗口背景...
  • 题记:闲来无事,学习了下Qt,发现Qt确实比MFC强大许多,这是我的qt实现的第一个项目,代码可能有冗余,但是基本实现了记事本功能,注释详细,适用于小白入门。 工程目录: main.cpp mainwindow.cpp mainwindow....
  • 一、首先来认识一下什么是菜单栏,什么是工具栏。 例如在Notepad++中: 新建一个文件夹,起名为QT_menu_tool_MainWindow,跟前面的文件一样,注意到了文件类型处,我们把新文件定义为QMainWindow型,这个是PC端常用...
  • 想实时获取到 QT ToolBar 工具栏浮动的状态,以实时调整窗体的布局。 先使用查找引擎,发现找不到什么有用的文章。 只能查 QT Help,最后获取到使用 SIGNAL topLevelChanged 可以达到目的。 于是写了如下的代码,...
  • QT 任务栏进度条

    千次阅读 2019-05-31 11:46:04
    简述 我们下载东西的时候都会想知道自己下载多少了,还有...这时候任务栏进度条就有用了,我们可以在做别的事时只需要看任务栏进度条就能够知道下载的进度了,很多软件都有这样的功能,比如谷歌浏览器、迅雷。 ...
  • 将Open拖到菜单栏下一个很小第工具栏(注意看有一个很小第横条,这个是工具栏) 这时候mainToolBar底下就多了一个actionOpen了,同样发方法你可以添加其他第选项,和菜单栏一样的可以添加分隔符 想想还是说下添加...
  • 实现全屏还有右击菜单的代码, qt 5.x平台,全屏并且覆盖windows任务栏

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,859
精华内容 2,743
关键字:

qt实现工具栏的代码