Qt Designer - 如何将信号连接到静态函数?

2023-11-27

好的,我正在使用 Qt Designer 构建 GUI。我已经设法弄清楚如何制作菜单栏,并向菜单栏添加了一些操作,但现在我需要连接这些操作以使它们执行某些操作。

具体来说,在我的文件菜单上,我有简单的打开操作。我希望此操作运行一个调用我的 QFileDialog 等的函数,但我不知道如何执行此操作。

那么,如何将我的 actionOpen 连接到我的静态函数?

我使用的是最新的Qt,5.0.2

我在这里有点沮丧。这显然是人们可能需要做的最基本的事情之一,但我在网络上的任何地方都找不到任何真正的解决方案。从缺乏 Qt wiki,到其他人的问题,似乎没有人真正有明确的答案。对于旧版本的 Qt 有答案,但在这些旧版本中显然信号无法连接到静态函数,因此这些是无关紧要的。似乎没有人知道如何通过 Qt Designer 来做到这一点。而且,没有人明确把什么放在哪里。

我的 main.cpp 文件中有这一行:

QObject::connect(actionOpen, &actionOpen::triggered, fileOpen)

我在 Qt Designer 中创建了一个名为“actionOpen”的对象,有一个名为“triggered”的信号,并且在 main.cpp 中的 main 下面定义了一个名为“fileOpen”的函数。这似乎遵循正确的语法,但它会引发许多错误。

另外,我可以在 Qt Creator 中重复单击“构建”,每次都会出现不同数量的错误,消失然后重新出现,而我什至不需要接触代码。我开始认为这个 IDE 有点像 POS。

EDIT:

这是我的文件。也许这会有所帮助。

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void fileOpen();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <fstream>

using namespace std;


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.show();


    return a.exec();
}

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>

using namespace std;



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QObject::connect(ui->actionOpen, &QAction::triggered, &MainWindow::fileOpen);
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;

}

void fileOpen()
{

    /*
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QString(),
        tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly)) {
            QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
            return;
        }
        QTextStream in(&file);
        ui->textEdit->setText(in.readAll());
        file.close();
    }
    */

    cout << "Hello!";
}

第二个论点是不正确的。您应该指定类名称,而不是对象名称。所以应该是:

QObject::connect(actionOpen, &QAction::triggered, fileOpen);

完整的工作示例(已测试):

void fileOpen() {
  qDebug() << "ok";
}

int main(int argc, char *argv[]) {
  QApplication a(argc, argv);
  QMenu menu;
  QAction* actionOpen = menu.addAction("test");
  QObject::connect(actionOpen, &QAction::triggered, fileOpen);
  menu.show();
  return a.exec();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt Designer - 如何将信号连接到静态函数? 的相关文章

  • 哪些 iomanip 操纵器具有“粘性”?

    我最近在创建一个stringstream由于我错误地假设std setw 会影响每次插入的字符串流 直到我明确更改它 然而 插入后它总是被取消设置 With timestruct with value of Oct 7 9 04 AM st
  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 根据另一个列表的内容对列表进行排序

    我有一个包含整数列表的列表和另一个包含同时包含整数和字符串的类的列表 我想做的是按字母顺序对列表进行排序 将第一个列表中存在的条目放在前面 这是我的代码和预期输出 using System using System Collections
  • 使用inotify监控文件

    我正在使用 inotify 来监视本地文件 例如使用 root temp inotify add watch fd root temp mask 删除该文件后 程序将被阻止read fd buf bufSize 功能 即使我创建一个新的 r
  • ASP .NET MVC 5 - 客户地址一对一关系

    我在这里查看了论坛 实际上发现了一些类似的问题 但不是相同的问题 类似的解决方案没有给我正确的答案 我正在使用实体框架和代码优先方法来处理 ASP NET MVC 5 我想建立客户 gt 地址一对一关系的模型 我建模的是 客户等级 publ
  • 限制纬度和经度值的模数

    我有代表纬度和经度的双精度数 我可以轻松地将经度限制为 180 0 180 0 具有以下功能 double limitLon double lon return fmod lon 180 0 360 0 180 0 这是有效的 因为一端是排
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 是否有更好(更简单)的方法来获取特定域 SID?

    我被指派修改 WinForms 应用程序 主要检查登录用户是否属于特定域 这是我到目前为止所想出的 byte domainSid var directoryContext new DirectoryContext DirectoryCont
  • 使用 microsoft word.interop 删除 Word 文档中的空白页

    我创建了一个Word文档 它使用以下命令生成动态内容词互操作 它有一些分页符之间使用 我面临的问题是 此分页符会创建我不想向用户显示的空白页面 在某些情况下 我需要在那里添加这些分页符以维护页面布局 因此我无法考虑删除这些分页符 但我想要的
  • 为什么long long 2147483647 + 1 = -2147483648? [复制]

    这个问题在这里已经有答案了 为什么这段代码不打印相同的数字 long long a b a 2147483647 1 b 2147483648 printf lld n a printf lld n b 我知道int变量的最大数量是2147
  • 如何检查是否发生溢出? [复制]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • 在 C# 4.0 中,是否可以从泛型类型参数派生类?

    我一直在尝试这个 但我似乎无法弄清楚 我想做这个 public abstract class SingletonType
  • 为什么 C# 编译的正则表达式比等效的字符串方法更快?

    每次我必须对字符串执行简单的包含或替换操作 其中我正在搜索的术语是固定值 时 我发现如果我获取示例输入并对其进行一些分析 则使用编译的正则表达式是几乎 总是比使用 String 类中的等效方法更快 我尝试过比较多种方法 hs是要搜索的 干草
  • “sizeof”对不完整类型列表结构 C 的无效应用

    我正在尝试实现一种处理页面错误的替换算法 因此 我尝试使用 malloc 创建一个循环链表 但出现以下错误 无效的应用程序sizeof to incomplete typepageInMemory 以下是代码 typedef struct
  • 当“多次安装 MSBuild”时,Dotnet 项目转换尝试转换失败

    try convert w Test csproj target framework netstandard2 0 结果是 Multiple installs of MSBuild detected please select one In
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • MsBuild 在 Visual Studio Online 上找不到恢复的 NuGet 包

    我尝试构建一个存储在 Visual Studio Online 上的外部 GIT 存储库中的解决方案 它有以下步骤 1 Git 恢复 有效 2 NuGet 恢复 有效 3 构建 不起作用 查看日志时我的第一个猜测是 MsBuild 没有查找
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind

随机推荐

  • 如何在 Swift 中使用 XIB 文件初始化/实例化自定义 UIView 类

    我有一堂课叫MyClass这是一个子类UIView 我想用一个初始化XIB文件 我不确定如何使用名为的 xib 文件初始化此类View xib class MyClass UIView what should I do here init
  • 服务层的 Spring AOP

    我需要一些有关 Spring AOP 的帮助 我有以下代码 Service public class UserSecurityService implements UserDetailsService Autowired private U
  • 为什么有些资源有名称和“名称”属性?

    我是 Terraform 的新手 正在尝试在 Azure 上创建一些资源 对我来说 资源名称和属性之间似乎存在一些不必要的重复name在定义中 resource azurerm resource group group name name
  • 如何将 ${CHANGES} 传递给下游作业?

    我有上游工作轮询 SVN 进行更改 如果检测到更改 则开始构建 构建完成后 上游项目调用下游项目运行测试 我正在使用 触发参数化构建 我希望下游项目能够发送一封电子邮件 其中包含测试结果以及导致构建 测试的 SVN 更改 但问题是 如果我在
  • 关于虚函数的成本

    如果我在循环中调用虚拟函数 1000 次 我会承受 1000 次还是仅一次的 vtable 查找开销 编译器也许能够优化它 例如 以下内容 至少在概念上 很容易优化 Foo f new Foo for int i 0 i lt 1000 i
  • Android NDK Native方法未找到错误

    我正在尝试使用本机代码构建 android 应用程序 所以我想测试 ndk 是否成功运行 当我尝试运行我的第一个 hello world 项目时 日志猫说 01 21 23 30 06 780 E AndroidRuntime 939 FA
  • 打开受密码保护的 sqlite 数据库

    我创建了一个受密码保护的 sqlite 数据库 我希望能够查看数据库 以便在项目开发过程中检查是否正确插入了内容 我已经下载了 sqlite 数据库浏览器 但这似乎不允许您打开加密数据库 有没有一种方法可以打开数据库文件 感谢您的任何帮助
  • 存在哪些 CLR/.NET 字节码工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我非常了解用于操作 生成 反编译 JVM 字节码的 Java 工具 ASM cglib jad 等 CLR 字节码有哪些类似的工具 人们会为 CLR
  • 如何导入单个 Lodash 函数?

    使用 webpack 我正在尝试导入isEqual since lodash似乎正在进口一切 我尝试执行以下操作但没有成功 import isEqual from lodash import isEqual from lodash lang
  • 当 JS 需要 PHP 变量时,如何将 javascript 与 PHP 分开?

    下面是我在 jquery 和 PHP 中看到的代码的一小段 请注意第 5 行的 PHP 部分 我通常将 javascript 放入单独的文件中 那么我如何才能将 JS 保存在单独的文件中 但在需要时仍然使用 PHP 如下所示 when th
  • [[maybe_unused]] 在成员变量上,GCC 警告(错误地?)该属性被忽略

    在下面的example struct Foo maybe unused int member 1 void bar maybe unused int local 0 int main int argc char argv Foo f f b
  • 选择每组中倒数第二条记录

    这里有张桌子Remark包含如下所示的数据 SerialNo RemarkNo Desp 10 1 rainy 10 2 sunny 11 1 sunny 11 2 rainy 11 3 cloudy 11 4 sunny 12 1 rai
  • “无法锁定变量”SSIS 错误

    对于每小时运行的预定 SSIS 包 我随机收到错误 最有趣的是 如果我删除检查点文件并再次运行该包 它工作正常 但错误可能会在将来的运行中出现 我不知道为什么会发生这种情况 这是完整的错误消息 以用户身份执行 UserNameChanged
  • 多维数组的嵌套 ng-repeat

    我在尝试着使用 ng repeat 指令在 html 中显示二维数组 我可以显示第一个维度 表行 但第二个维度 表数据 不起作用 我见过很多使用对象 JSON 键值数据结构的解决方案 但我找不到有效的东西对于仅包含其他数组的数组 以下是一些
  • 在 pandas python 中将指数或科学数转换为整数

    我是Python的初学者 试图从数据集中获取具有最高idmb评级和最高总总额的行 但我的gross total值不是整数 我如何将其转换为整数 以及如何获得执行统计功能的特定值 import pandas as pd dataset pd
  • 检测挤压的最简单方法

    这是一个WEB APP不是本机应用程序 请不要使用 Objective C NS 命令 所以我需要检测 iOS 上的 捏 事件 问题是我看到的用于执行手势或多点触摸事件的每个插件或方法 通常 都是使用 jQuery 并且是针对阳光下每个手势
  • 将二进制文件安装到 /bin、/sbin、/usr/bin 和 /usr/sbin 中,与 --prefix 和 DESTDIR 交互

    大多数使用 Autotools 的软件包都是用户级实用程序 或者至少具有足够高的级别 可以完全在 usr 或低到完全低于 usr 我正在编写一个包 需要将一些文件安装到 bin 一些进入 sbin usr bin and usr sbin
  • 安全且区域设置敏感地解析数字

    Java s NumberFormat1 非线程安全 可以通过ThreadLocal 2 不方便正确使用对于最简单的用例 当我知道字符串是否应包含 int long 或 double 并且想要一个如下 API 时 int parseInt
  • Python:在 Windows 上的 Ubuntu 上通过 Bash 运行 pygame

    我最近安装并一直在玩Windows 上 Ubuntu 上的 Bash 在大多数情况下 它效果很好 我正在尝试通过 BUW 运行 pygame 脚本 但它不会在弹出窗口中渲染图形 相反 它似乎包含在 bash 窗口中 如下所示 这是 pyga
  • Qt Designer - 如何将信号连接到静态函数?

    好的 我正在使用 Qt Designer 构建 GUI 我已经设法弄清楚如何制作菜单栏 并向菜单栏添加了一些操作 但现在我需要连接这些操作以使它们执行某些操作 具体来说 在我的文件菜单上 我有简单的打开操作 我希望此操作运行一个调用我的 Q