Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 切换QAction以设置QStackedWidget';s当前小部件_Qt_Qt5 - Fatal编程技术网

Qt 切换QAction以设置QStackedWidget';s当前小部件

Qt 切换QAction以设置QStackedWidget';s当前小部件,qt,qt5,Qt,Qt5,因此,我试图做的是,当我按下showMenu(QAction)时,容器(QStackedWidget)将当前小部件更改为menuWidget,当我再次按下它时,它将隐藏 好的,我已经设法得到了以下代码: connect(showMenu, SIGNAL(triggered()), map, SLOT(map())); map->setMapping(menuWidget, container); Object::connect(map, SIGNAL(mapped(QWidget *)),

因此,我试图做的是,当我按下showMenu(QAction)时,容器(QStackedWidget)将当前小部件更改为menuWidget,当我再次按下它时,它将隐藏

好的,我已经设法得到了以下代码:

connect(showMenu, SIGNAL(triggered()), map, SLOT(map()));
map->setMapping(menuWidget, container);
Object::connect(map, SIGNAL(mapped(QWidget *)), container, SLOT(setCurrentWidget(QWidget *)));
如果我运行:

container->setCurrentWidget(menuWidget);

直接来说,它工作得很好,所以我没有把事情搞砸。

你应该在你的类中创建一个显示/隐藏
menuWidget
的窗口

如果您使用的是可检查的
QAction
对象,则可以使用signal,并使用
checked
变量来确定是否应显示或隐藏小部件

如果未使用可检查的
QAction
对象,则应创建类型为
bool
的类成员变量,并在插槽中切换:

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    ...
private:
    bool toggleStatus; // set this to false in your constructor
    ...
};


您的
setMapping
调用看起来很奇怪。似乎您应该将
showMenu
menuWidget
传递给它:
map->setMapping(showMenu,menuWidget)@thuga成功了,非常感谢!你知道我如何在再次单击showMenu操作时简单地将其更改回来吗?我建议在你的类中设置一个插槽,如
MyClass::menuToggled(bool checked)
。然后将信号连接到此插槽。然后在该插槽中检查
checked
是否为真,并在此基础上隐藏/显示
menuWidget
connect(显示菜单,信号(切换(bool)),此插槽(菜单切换(bool))
void main window::menuToggled(bool选中){if(选中){container->setCurrentWidget(menuWidget);}}
现在它什么也不做:(@thugaOh,我错了。我以为您在对可检查的
QAction
对象进行操作。您可以将其设置为可检查。或者,如果您不想有可检查的操作,请使用在
menuToggled
插槽中切换的
bool
成员变量(您可以从插槽中删除
bool checked
参数)。
void MainWindow::menuToggled()
{
    toggleStatus = !toggleStatus;
    if(toggleStatus)
    {
        container->setCurrentWidget(menuWidget);
    }
    else
    {
        container->setCurrentWidget(mdiContainer);
    }
}