我打算在我的应用程序中使用qActions全局使用。我们的想法是让小部件父/子层次结构中的任何级别都可以使用操作。
假设我有以下GUI:
+--------------+
| +----------+ |
| | +----+ | |
| | | W2 | | |
| | +----+ | |
| | W1 | |
| +----------+ |
| MainWindow |
+--------------+
W2有一个QPushButton,我想在MainWindow中定义一个QAction。所以问题是:在多层次小部件层次结构中使用QActions的推荐方法是什么?
以下是我的方法:
在MainWindow单例中定义操作,和 从W2访问它以添加qaction 到QPushButton。
在MainWindow中定义操作并将它们添加到W1,然后依次添加到W1 会将qaction添加到W2中 反过来会将动作添加到 QPushButton(我不喜欢这个)。
创建一个Delegate单例类 保持qactions并从中访问它 MainWindow打造全球化 qactions触发器的连接 后端(模型),也访问 它从W2添加想要的动作 到QPushButton。
由于
答案 0 :(得分:1)
另一方面,我会使用第二个选项的修改版本,因为它保留了程序的层次结构。我说另一种方式,因为我会让w2 pushButton将信号传播到mainWindow。这个选项的一个优点是,如果你在w1中添加另一个w2,你只需要将它连接到w1,你的mainWindow将保持完全相同(封装)。同样的,如果你在mainWindow中添加一个w1,你只需要将新的w1连接到你的mainWindow,你就不必关心新w1的w2中的pushButton。
以下是使此解决方案有效的代码:
在你的w2类构造函数中:
connect(pushButton, SIGNAL(clicked(bool)), this, SIGNAL(buttonClicked(bool)));
在你的w1类构造函数中:
connect(widget2, SIGNAL(buttonClicked(bool)), this, SIGNAL(buttonClicked(bool)));
在你的mainWindow类构造函数中:
connect(widget1, SIGNAL(buttonClicked(bool)), anyAction, SIGNAL(triggered(bool)));
connect(anyAction, SIGNAL(triggered(bool)), this, SLOT(onActionTriggered(bool)));
很明显,您必须在类定义中定义正确的信号/槽,并确保已经创建了任何连接。
希望这有帮助。