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
解释时间有点长,但是您可以通过该功能将按钮信号连接到插槽.
connect(button, SIGNAL(triggered()), this, SLOT(doSomething()));
Run Code Online (Sandbox Code Playgroud)
在尝试编写代码之前,您确实需要阅读和理解信号和插槽
编辑:您正在尝试在已编译的单独运行程序中调用函数?
您是否将Qt信号与C/Unix信号混淆?您可以从Qt应用程序中启动单独的应用程序,获取其PID,然后向其发送"c"信号.
或者,如果你有应用程序的源代码,你可以将它的代码包含在你的Qt应用程序中,然后通过简单地用Qt槽处理程序包装它们来调用任何函数.
| 归档时间: |
|
| 查看次数: |
15044 次 |
| 最近记录: |