【问题标题】:Passing Variable in Qt from tab to tab in QTabWidget在 QTabWidget 中将 Qt 中的变量从选项卡传递到选项卡
【发布时间】:2014-01-03 07:28:43
【问题描述】:

我是 Qt 的新手,目前正在开发一个 QTabWidget,它有两个选项卡意味着两个小部件,因此

tabWidget->addTab(new First_Widget(),tr("Home"));
tabWidget->addTab(new Second_Widget(), tr("Download"));

第一个小部件有一些我想在第二个小部件中使用的整数和浮点值。我可以像这样制作第二个小部件的构造函数

tabWidget->addTab(new Second_Widget(argument1, argument2,argument3), tr("Download"));

我认为我可以从第一个小部件中调用第二个选项卡,但在这种情况下,第二个选项卡将被隐藏,直到我不单击相应的按钮。谁能告诉我如何在第二个标签中使用第一个标签的值。

【问题讨论】:

  • 基于答案中的cmets,感觉这就像一个家庭作业,OP似乎没有最低限度的了解,所以我害怕投票关闭。

标签: c++ qt qtabwidget


【解决方案1】:

您可以在 tabWidget 调用级别维护变量。并通过引用两个选项卡来传递变量。

【讨论】:

    【解决方案2】:

    我建议你使用发射连接机制。

    First_Widget 在此整数和浮点数发生变化时发出信号,Second_Widget 将此信号连接到相关插槽。

    Second_Widget 只需知道可以作为构造函数参数传递的接口:

    // demo code, not tested
    class IEmmiter
    {
        Q_OBJECT
        signal:
           void Integer1Changed(int new_value);
           .....
    };
    
    class First_Widget : public IEmmiter
    {
    
    };
    
    class Second_Widget
    {
        Second_Widget(const IEmmiter & emmiter)
        {
            connect(&emmiter, SIGNAL(Integer1Changed(int)), this, SLOT(Integer1Changed(int)));
            ....
        }
    
    };
    
    // on your programm
    auto fw = First_Widget();
    auto sw = Second_Widget(*fw);
    
    tabWidget->addTab(fw, tr("Home"));
    tabWidget->addTab(sw, tr("Download"));
    

    【讨论】:

    • 先生,说真的,我不明白这段代码在做什么,但我试图在我的代码中实现它,但我遇到了 50 多个错误......不知道发生了什么。
    • @Hamid:好吧,这里的 auto 确实是过度的,因为这使得代码 C++11 仅兼容或更高版本,并且成员是私有的,没有 public 说明符,但你仍然应该是能够通过这样的提示开始做某事。
    • @Hamid,这只是一个想法,不会编译,继续努力。所有 Qt 都广泛使用信号槽机制,如果你想提高你的 Qt 知识,你必须了解它。它非常强大,允许您封装代码并最大限度地减少依赖关系。
    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多