2017-03-06 114 views
1

早上好QAction信号插槽中的隐形UI

我在ubuntu下使用Qdesigner和C++ 17进行非常简单的编程也非常具体。 我的GUI和我的问题的目标详细如下。

AIMS:

我需要标记几个图像数据集。 输入的算法给了我三个输出存储在四个文件夹,然后我将diplay从输入数据集侧的每个图像与三个相应的输出数据的每一个到另一边,并finaly采取有关结果的质量布尔判定的算法。 因为我申请几个数据集我想,当我开始我的项目来选择每一个输入和三个输出文件夹这个算法。

问题:

我做了主窗口中我加载每个图像,并采取了决定。 我在约束情况下评估它的效果。 我为了实现开放项目的目标,我做了第二个UI,在那里我开放了projet使用的外观。 我在主窗口外的环境中评估第二个UI,它可以很好地工作。 所以我在slot方法中调用这个ui,但是在我调用菜单时并没有发生任何事情。 多亏了std::cout比如我可以检查口法,当我点击菜单或使用快捷键但没有发生被调用。

下面是由QMenu对象称为槽方法。

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没有副本。

在此先感谢您的帮助。

EDIT

SOLUTION:

从类QWidget继承的类new_project3。 出于某种原因,我不知道我没有到达,使从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()是解决我的问题。 但是,这将是另一个问题。

回答

0

.exec()QDialog的成员,但不是QWidget的成员)执行事件循环并使其成为模态(同步,阻止程序)。在你原来的代码中,这个小部件是一个本地对象,只要插槽结束就被销毁。由于.show()是非阻塞的,该小部件几乎立即被标记为显示并销毁。

+0

这就是我没有看到任何东西的原因。 非常感谢您的解释。 现在看来很清楚,与用户的任何交互都必须从QDialog继承。 –