QAction信号槽中的不可见UI

时间:2017-03-06 17:33:11

标签: c++ qt user-interface

早上好

我正在编写一个非常简单的用于在ubuntu下使用Qdesigner和C ++ 17的非常具体的任务。 我的GUI和我的问题的目标详情如下。

目的:

我需要标记几个图像数据集。 对于输入,算法给了我三个输出,存储在四个文件夹中,然后我将每个图像从输入数据集一侧显示到三个相应的输出数据中的每一个,并最终采取布尔决定关于结果的质量。算法。 因为我在几个数据集上应用了这个算法,所以当我启动项目时,我想为每个数据集选择输入和三个输出文件夹。

ISSUE:

我在主窗口里面加载每个图像并做出决定。 我在一个约束的情况下评估它运作良好。 为了实现我的开放项目的目标,我制作了第二个UI,其中我使用了开放式项目。 我在主窗口之外的上下文中评估第二个UI,它也可以正常工作。 所以我在插槽方法中调用这个ui,但是当我调用菜单时没有任何事情发生。 感谢std::cout实例,我可以在单击菜单或使用快捷方式时检查插槽方法,但没有任何反应。

以下是QMenu对象调用的slot方法。

void main_gui::on_New_Project_triggered()
{
    std::cout<<"NEW PROJECT "<<std::endl;

    new_project3 np(this,this);
    // new_project3 np(this,this->parent());

    np.show();
    np.raise();
    np.activateWindow();

}

new_project3类构造函数的签名是:

new_project3(main_gui* main_window, QWidget *parent);

对于第一个参数,我与main_gui类共享new_project3实例,以便初始化多个QStringList而无需复制。

提前感谢您的帮助。

修改

解决方案:

班级new_project3继承自班级QWidget。 出于某种原因,我不知道我没有到达new_project3QMainWindows继承的类中工作的任何实例。 但是我修改了new_project3的继承以便从类QDialog继承,然后以下代码工作正常:

void main_gui::on_New_Project_triggered()
{
    std::cout<<"NEW PROJECT "<<std::endl;

    new_project3 np(this,this);

    np.exec();

}

这解决了我的问题。 我想知道exec()中写的是什么来解决我的问题。 但这是另一个问题。

1 个答案:

答案 0 :(得分:0)

.exec()QDialog的成员但不是QWidget的成员)执行事件循环并使其成为模态(同步,阻止)。在您的原始代码中,小部件是一个本地对象,在插槽结束时被销毁。由于.show()是非阻塞的,因此窗口小部件几乎立即被标记显示和销毁。