使用Qt从C ++程序运行方法而不在Qt中编写整个程序

时间:2014-05-09 17:10:49

标签: c++ qt

是否可以使用具有某些输入参数的Qt从C ++程序运行某个方法,例如单击按钮而不在Qt本身中编写完整的程序

假设我在Visual Studio中有一个带有相应.exe的项目,我想在每次单击按钮时使用输入参数5运行方法示例。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

Qt通过创建QWidget窗口,然后创建事件循环来运行。

创建窗口的代码,然后触发另一个函数的按钮是微不足道的。

Qt提供的许多示例都显示了此功能。

要开始使用,请下载Qt。下载适用于Visual Studio的Qt附加组件。请注意,Visual Studio的快速版本不适用于Qt附加组件。

完成所有这些操作后,从可用的Qt类创建一个Qt项目。在这种情况下,我不会选择QML / Qt Quick,而只选择Qt Widgets类,例如QWidgetQDialogQMainWindow

使用Qt Add-On应确保您已找到可供Visual Studio使用的库。

确保您可以使用某种Qt Widget获取Hello World示例并且可以运行。

它为您生成的代码应如下所示:

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

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

    return a.exec();
}

要添加按钮,您需要将其放在Widget上,然后将SLOT连接到其clicked()信号。以下是一种紧凑的方式。

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QDebug>
#include <QApplication>

static void someFunction ()
{
    qDebug() << "Button was clicked";
    // run my other function that requires a parameter of 5

    qDebug() << "Run my other function with 5!";
    // otherFunction(5);
}

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

    QPushButton *button = new QPushButton("Click Me");
    QObject::connect(button, &QPushButton::clicked, someFunction);

    QVBoxLayout *vbox = new QVBoxLayout();
    vbox->addWidget(button);

    w.setLayout(vbox);
    w.show();

    return a.exec();
}

要创建一个功能强大的GUI,您需要利用的不仅仅是一个仿函数,并使用QObjects并让它使用moc编译器并为您的所有自定义函数创建自己的信号和插槽。

使用Qt 5连接到仿函数是新的。

http://qt-project.org/wiki/New_Signal_Slot_Syntax

http://woboq.com/blog/new-signals-slots-syntax-in-qt5.html

更简洁的方法,但允许更多的可扩展性和OOP,是为你生成的QWidget或QMainWindow的子类,并在你的slots下的子类函数中添加一个方法列表文件中的列表。

http://qt-project.org/doc/qt-5/signalsandslots.html

花点时间了解信号和插槽,您可以使用Qt创建几乎任何可以想象的GUI。祝你好运。

希望有所帮助。