是否可以使用具有某些输入参数的Qt从C ++程序运行某个方法,例如单击按钮而不在Qt本身中编写完整的程序?
假设我在Visual Studio中有一个带有相应.exe的项目,我想在每次单击按钮时使用输入参数5运行方法示例。我怎么能这样做?
答案 0 :(得分:3)
Qt通过创建QWidget
窗口,然后创建事件循环来运行。
创建窗口的代码,然后触发另一个函数的按钮是微不足道的。
Qt提供的许多示例都显示了此功能。
要开始使用,请下载Qt。下载适用于Visual Studio的Qt附加组件。请注意,Visual Studio的快速版本不适用于Qt附加组件。
完成所有这些操作后,从可用的Qt类创建一个Qt项目。在这种情况下,我不会选择QML / Qt Quick,而只选择Qt Widgets类,例如QWidget
或QDialog
或QMainWindow
。
使用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。祝你好运。
希望有所帮助。