qt怎么生成exe文件?qt如何自定义信号函数?

阳光 2022-04-13 15:33:52 java常见问答 7283

Qt是一个跨平台的 C++ 开发库,主要用来开发图形用户界面程序,并且Qt 是应用程序开发的一站式解决方案,如果我们学会qt,那么在开发中就可以高枕无忧了!那qt怎么生成exe文件?下面来我们就来给大家讲解一下。

一、首先将左下角的debug修改为release;

二、设置项目构建生成的文件的目录;

三、点击运行进行构建。该文件夹下就能看到有exe文件生成,但点击此时无法运行,原因是缺少Qt必要的库文件。

四、将该exe文件拷贝到新建的单独文件夹中;

五、在windows下搜索Qt,打开命令窗口;

qt怎么生成exe文件?qt如何自定义信号函数?.jpg

六、cd到exe所在的目录;

1.jpg

七、输入windeployqt + exe文件名称 ,如图,将所需的库文件拷到对应目录;

2.jpg

八、此时该目录下点击exe可以正常运行;

3.jpg

qt如何自定义信号函数?

信号函数指的是符合以下条件的函数:

1. 定义在某个类中,该类直接或间接继承自 QObject 类;

2. 用 signals 关键字修饰;

3. 函数只需要声明,不需要定义(实现);

4. 函数的返回值类型为 void,参数的类型和个数不限。

举个简单的例子:

class MyWidget: public QWidget
{
    //Q_OBJECT 是一个宏,添加它才能正常使用 Qt 的信号和槽机制
    Q_OBJECT
    //修饰信号函数的关键字
    signals:
        //自定义的信号函数
        void MySignal(QString message);
};

我们自定义了一个继承自 QWidget 的 MyWidget 类,QWidget 是 QObject 的子类,所以 MyWidget 间接继承自 QObject 类。MyWidget 类中自定义了名为 MySignal 的信号函数(可以简称 MySignal 信号),它用 signals 关键字修饰,没有返回值,也没有定义(实现),仅有 1 个参数。

对于 MySignal() 信号函数,程序中不会直接调用它,而是借助 connect() 连接某个槽函数,实现的语法格式是:

MyWidget myWidget;
QObject::connect(&myWidget,&MyWidget::MySignal,信号接收者,槽函数);

一旦确定了信号接收者和槽函数,当 MySignal 信号发出后,与之相连的槽函数就会执行。那么,程序中如何发出 MySignal 信号呢?

对于 Qt 提供给我们的信号函数,其底层已经设置好了信号发出的时机,例如按下鼠标时、点击 Enter 回车键时等等。对于自定义的信号,我们需要自己指定信号发出的时机,这就需要用到 emit 关键字。emit 中文意思为“发出、射出”,是 Qt 在 C++ 基础上扩展的一个关键字,专门用来发射信号。

以定义好的 MySignal 信号为例,修改 MyWidget 类为:

class MyWidget: public QWidget
{
    //Q_OBJECT 是一个宏,添加它才能正常使用 Qt 的信号和槽机制
    Q_OBJECT
    //自定义信号函数
    signals:
        void MySignal(QString mess);
    public:
        void emitSignal()
        {
            emit MySignal(message);
        }
    private:
        QString message;
};

我们为 MyWidget 类新增了一个 emitSignal() 方法和一个 message 属性,emitSignal() 方法中的emit MySignal(message);语句就表示发射 MySignal 信号。当程序中执行 emitSingal() 函数时,就会发出 MySignal 信号,message 属性的值也会随信号一同发出,对应的槽函数可以接收到 message 的值。

对于每一个自定义的信号函数,程序中都应该提供发射该信号的方法(函数),而且这样的方法(函数)可以有多个。

总之我们在开发中,如果我们遇到信号函数的参数类型和个数无法满足实际需求的时候,我们就可以进行利用自定义函数解决哦!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

git客户端怎么下载?git如何进行配置?

java内存溢出会生成啥文件?如何防止java内存溢出?

mybatis怎么连接数据库?mybatis链接数据库方法