Qt中的事件处理

THE*_*TOR 2 c++ user-interface qt button event-handling

对于GUI开发而言,我是Qt GUI编程的新手,来自.NET/Winforms背景.我正在使用Qt Creator IDE.

如何在Qt中处理按钮按下事件以执行以下操作:

if (button.clicked = true)
{
    startProgram();
}
Run Code Online (Sandbox Code Playgroud)

另外,我如何浏览配置文件,该文件在打开时会将值填充到我的所有行编辑文本框中?我用C++编程.

编辑:我正在使用其他人编写的控制台应用程序并围绕它构建GUI.我想通过按钮单击事件访问其中一个功能.但是,我无法弄清楚如何让原始应用程序的功能在我尝试使用SIGNALS和SLOTS时创建的GUI范围内.

Kal*_*lle 15

一个简单的例子可能是这样的.假设您有类似ProgramStarter的类:

#include <QObject>

class ProgramStarter : public QObject {

    Q_OBJECT

public slots:

    void startProgram() {
        //Do stuff
    }

};
Run Code Online (Sandbox Code Playgroud)

以及使用ProgramStarter的类似内容:

#include <QtGui/QApplication>
#include <QPushButton>
#include <QObject>

#include "programstarter.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton *testButton = new QPushButton("Push me");
    testButton->resize(100, 40);
    testButton->show();

    ProgramStarter *program = new ProgramStarter;

    QObject::connect(testButton, SIGNAL(clicked()), program, SLOT(startProgram()));

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

Qt使用信号和插槽在对象之间进行通信.核心思想是当事件发生时发出信号,并且这些信号可以连接到插槽.在这种情况下,当按下按钮并且clicked()信号连接到startProgram()插槽时,按钮会发出clicked()信号.因此,当按下按钮时,将调用startProgram().

Qt有一个元对象系统,可以使用信号和插槽等.这就是ProgramStarter继承QObject的原因以及Q_OBJECT宏在标头中的原因.如果你想了解信号和插槽以及元对象系统在Qt中是如何工作的,我强烈建议你阅读这篇文章:http://doc.qt.io/qt-5/signalsandslots.html


Mar*_*ett 6

解释时间有点长,但是您可以通过该功能将按钮信号连接到插槽.

 connect(button, SIGNAL(triggered()), this, SLOT(doSomething()));
Run Code Online (Sandbox Code Playgroud)

在尝试编写代码之前,您确实需要阅读和理解信号和插槽

编辑:您正在尝试在已编译的单独运行程序中调用函数?
您是否将Qt信号与C/Unix信号混淆?您可以从Qt应用程序中启动单独的应用程序,获取其PID,然后向其发送"c"信号.

或者,如果你有应用程序的源代码,你可以将它的代码包含在你的Qt应用程序中,然后通过简单地用Qt槽处理程序包装它们来调用任何函数.