繁体   English   中英

QAction信号槽中的不可见UI

[英]Invisible UI in an QAction Signal Slot

早上好

我在ubuntu下使用Qdesigner和C ++ 17编写一个非常简单的非常特殊的任务。 我的GUI和我的问题的目标详述如下。

目的:

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

问题:

我在内部制作主窗口,我加载每个图像并做出决定。 我在一个约束的情况下评估它运作良好。 为了实现我的开放项目的目标,我制作了第二个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);

对于第一个参数,我与new_project3类共享main_gui实例,以便初始化几个没有副本的QStringList

在此先感谢您的帮助。

编辑

解:

new_project3继承自类QWidget 出于某种原因,我不知道我没有到达使得在从QMainWindows继承的类中工作的new_project3任何实例。 但是我修改了new_project3的继承以便从类QDialog继承,然后下面的代码工作得很好:

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

    new_project3 np(this,this);

    np.exec();

}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM