我正在尝试使用Qt Creator和Application Example。
我想在工具栏菜单中添加一个可检查的菜单条目,其中显示“锁定工具栏”,并在选中时锁定所有工具栏的位置。我想这是一个很常见的功能。
我设法通过以下方法找到锁定单个条的命令:
toolBar->setMovable(false);
但我无法弄清楚如何锁定所有工具栏。
修改
此问题过去包含有关工具栏上下文菜单的查询,而不是标准菜单。由于我在其他地方得到了关于上下文菜单的答案,我将其从这个问题中删除了。
答案 0 :(得分:1)
以下是如何实现它的示例。首先,添加QAction和QMenu;另外,声明所有工具栏都是私有的:
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);
}
答案 1 :(得分:1)
如果你有一个指向主窗口的指针,你可以简单地找到所有工具栏并迭代它们:
// in slot
for (auto *t: mainWindow->findChildren<QToolBar*>())
t->setMovable(false);
或者,您可能希望在初始化UI时将所有工具栏连接到单个切换操作:
// in constructor
for (auto *t: this->findChildren<QToolBar*>())
connect(action, &QAction::toggled, t, &QToolBar::setMovable);