早上好
我在 ubuntu 下使用 Qdesigner 和 C++ 17 编写一个非常简单的也非常具体的任务。 我的 GUI 和我的问题的目的详细如下。
目标:
我需要标记多个图像数据集。 对于输入,一个算法给了我三个输出,存储在四个文件夹中,然后我将显示输入数据集中的每个图像与三个相应输出数据中的每一个并最终对结果的质量做出 bool 决定算法。 因为我将此算法应用于多个数据集,所以我想在开始项目时为每个数据集选择输入文件夹和三个输出文件夹。
问题:
我在主窗口中加载了每张图片并做出了决定。
我在约束情况下对其进行了评估,它运行良好。
为了实现开放项目的目标,我制作了第二个 UI,我在其中使用了开放项目的外观。
我在主窗口之外的上下文中评估了第二个 UI,它也运行良好。
所以我在插槽方法中调用这个 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);
对于第一个参数,我将 main_gui
实例与 new_project3
类共享,以便在没有复制的情况下初始化多个 QStringList
。
在此先感谢您的帮助。
编辑
解决方案:
new_project3
类继承自QWidget
类。
出于某种原因,我不知道我没有到达使 new_project3
的任何实例在从 QMainWindows
继承的类中工作。
但是我修改了 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()
是非阻塞的,因此小部件几乎立即被标记为显示和销毁。
关于c++ - QAction 信号槽中的隐形 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42632001/