c++ - QAction 信号槽中的隐形 UI

标签 c++ qt user-interface

早上好

我在 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/

相关文章:

c++ - 如何通过可变构造函数调用复制构造函数?

c++ - 具有多重继承和依赖父类的设计

C++ winapi 和 gtk 包装器 (gui)

c# - 在 .net 中使用 PrintDialog 和 PrintPreviewDialog 时 GUI 锁定

c++ - 拥有大量重载的类构造函数是否被认为是不好的编程实践?

c++ - 如何使用 std::ifstream 读取使用 QDataStream 编写的二进制文件

c++ - 创建自定义按钮

c++ - Qt delete 适用于 Valgrind 但不能正常执行

java - 构建 Java Windows 应用程序以访问在线 MySQL 数据库需要什么

c++ - 我无法使用继承 setter 和 getter 返回 const char * 变量