c++ - 如何通过Qt中的菜单锁定所有工具栏?

标签 c++ qt contextmenu toolbar

我正在试验 Qt Creator 和 Application Example .

我想在工具栏菜单中添加一个可检查的菜单条目,该菜单显示为“锁定工具栏”,并且在选中时锁定所有工具栏的位置。我想这是一个很常见的功能。

我设法通过以下方式找到了一个锁定单条柱的命令:

toolBar->setMovable(false);

但我不知道如何锁定所有工具栏。

编辑

这个问题曾经包含有关工具栏上下文菜单而不是标准菜单的查询。由于我在其他地方得到了有关上下文菜单的答案,因此我将其从这个问题中删除。

How to add an entry to toolbar context menu in qt?

最佳答案

这是一个如何实现它的例子。首先,添加一个 QAction和一个 QMenu ;另外,将所有工具栏声明为私有(private):

private:
    QMenu*     m_pLockMenu;

    QToolBar*  m_pFileToolBar;
    QToolBar*  m_pEditToolBar;
    QToolBar*  m_pHelpToolBar;

    QAction*   m_pLockAction;

此外,声明一个插槽,您将在触发操作时管理工具栏的锁定:

public slots :
    void lockActionTriggered();

实现您的广告位。你只需要锁定所有的工具栏:

void lockActionTriggered()
{
    m_pFileToolBar->setMovable(false);
    m_pEditToolbar->setMovable(false);
    m_pHelpToolBar->setMovable(false);
}

现在,您只需在 .cpp 中声明您的主窗口,并在其中添加菜单、工具栏和操作:

QMainWindow* mainWindow = new QMainWindow();

m_pLockMenu = mainWindow->menuBar()->addMenu("Lock Toolbars");

m_pFileToolBar = mainWindow->addToolBar("File");
m_pEditToolBar = mainWindow->addToolBar("Edit");
m_pHelpToolBar = mainWindow->addToolBar("Help");

m_pLockAction = new QAction("Lock", this);

现在,将操作添加到菜单:

m_pLockMenu->addAction(m_pLockAction);

并连接 QAction 的信号 triggered()到你的插槽:

connect(m_pLockAction, SIGNAL(triggered()), this, SLOT(lockActionTriggered()));

不要忘记show()你的主窗口:

mainWindow->show();

它现在应该可以正常工作了!


编辑

您的代码必须如下所示:

mainwindow.h 中:

class MainWindow : public QMainWindow
{

...

private:
    QMenu*     m_pLockMenu;

    QToolBar*  m_pFileToolBar;
    QToolBar*  m_pEditToolBar;
    QToolBar*  m_pHelpToolBar;

    QAction*   m_pLockAction;

public slots :
    void lockActionTriggered();
};

main.cpp中:

int main(int argc, char *argv[])
{

    ...
    QApplication app(argc, argv);
    MainWindow window;
    window.show();

    app.exec();

}

mainwindow.cpp中:

void MainWindow::createActions()
{
    m_pLockMenu = menuBar()->addMenu("Lock Toolbars");

    m_pFileToolBar = addToolBar("File");
    m_pEditToolBar = addToolBar("Edit");
    m_pHelpToolBar = addToolBar("Help");

    m_pLockAction = new QAction("Lock", this);

    m_pLockMenu->addAction(m_pLockAction);

    connect(m_pLockAction, SIGNAL(triggered()), this, SLOT(lockActionTriggered()));

    ...
}

void MainWindow::lockActionTriggered()
{
    m_pFileToolBar->setMovable(false);
    m_pEditToolbar->setMovable(false);
    m_pHelpToolBar->setMovable(false);
}

关于c++ - 如何通过Qt中的菜单锁定所有工具栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37987116/

相关文章:

javascript - 如何在没有 ID 的 JavaScript 中将文本插入选定的文本框?

python - tkinter 应用程序添加右键单击上下文菜单?

C++ 标记 3D 对象数组中的连续部分

c++ - 256 位 AVX vector 中 32 位 float 的水平和

c++ - 为什么主可执行文件和 dlopen 加载的共享库共享一个命名空间静态变量的拷贝?

c++ - 来自 Qt 中具有倾斜度的线的 BoundingRec

qt - 在Centos EL7上编译Meshlab

wpf - 用于删除 ListView 中的项目的上下文菜单

c++ - 如何在一台 Linux 上使用 C++ 从触摸屏获取输入。

c++ - swscaler - 错误的 src 图像指针 MacOS