QT 界面DLL
我现在是想在控制台程序里面调用我编写的QT 界面DLL我按照qwinwidget的例子实现了简单的界面DLL封装,在自己的程序里面也实现了调用,但是界面很简单没有交互,我想实现点击界面中的按钮,处理某一个功能,这个功能是我在自己程序里面实现的,我不知道该怎么实现接口的设计。
我的DLL程序代码贴在下面了,希望有大师指点一下该如何写接口
dialog是我自己建的界面的类
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
//#if defined(USERMANAGER_LIBRARY)
//#define USERMANAGERSHARES_EXPORT Q_DECL_EXPORT
//#else
//#define USERMANAGERSHARES_EXPORT Q_DECL_IMPORT
//#endif
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui::Dialog *ui;
private slots:
void button_click();
//public:
// virtual void showwindow()=0;
};
//class iun
//{
//public:
// enum Notify(OVER=0,CONTINUE);
// virtual void children(int w)iun::CONTINUE;
//};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QLabel>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
connect( ui->pushButton, SIGNAL(clicked()), this, SLOT(button_click()) );
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::button_click()
{
QLabel *label = new QLabel("Hello Qt!");
label->show();
}
main.cpp
QT dll 界面 --------------------编程问答--------------------
#include <qmfcapp.h>
#include <qwinwidget.h>
#include <QMessageBox>
#include <windows.h>
#include <dialog.h>
BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/ )
{
static bool ownApplication = FALSE;
//if ( dwReason == DLL_PROCESS_ATTACH )
//ownApplication = QMfcApp::pluginInstance( hInstance );
if ( dwReason == DLL_PROCESS_DETACH && ownApplication )
delete qApp;
return TRUE;
}
extern "C" __declspec(dllexport) int main(int argc,char* argv[])
{
QApplication a(argc, argv);
//USERMANAGERSHARES_EXPORT Dialog *createri();
Dialog w;
w.show();
return a.exec();
}
我设想的是点击界面按钮,传出消息,然后我的程序接到消息,进行处理,再把结果传回到界面,我设了两个基本函数,一个是初始化,一个是刷新(图像处理的软件),调用他们实现界面刷新,不知道可行不
希望大家帮我分析一下,我第一次做这个尝试,不是很懂,谢谢 --------------------编程问答-------------------- 你是指两个QT写的 App 之间 通信/交互?
传说中的 IPC ?
不知道 消息与槽能不能实现 IPC ,但用 Socket 是肯定可以啦
据说QT中的 QLocalServer和QLocalSocket 跟Windows中的NamePiple一样可以用来做IPC
--------------------编程问答-------------------- 回复2楼
没有那么高端啦
我是不知道接口该怎么写,比较基础的部分
应该是纯虚函数的内容 --------------------编程问答-------------------- 可以使用信号槽 --------------------编程问答-------------------- 回复四楼
信号槽我懂,怎么把槽函数传出来呢 --------------------编程问答-------------------- 程序这样写不好吧,移植性就不好,怎么还把main函数给封装了... 高端 --------------------编程问答-------------------- 原来是这样的,哪可以玩点低级的
直接绕过 信号 槽机制
用最原始的 回调函数
控制台程序 调用 dll 时把一个回调函数指针给 dll
界面动作时 恰当时候 调用这个 回调函数就OK了
不过扩展一下(我没试过,想法而已)
能否控制台初始化时把一个封装了槽函数的类 this 指针传参给dll,dll的代码中有这个类的声明
这样dll中就可以连接 来自 控制台程序的 一个类的 槽了
问题是 Qt中 信号与槽绑定是运行期还是编译期决定的,如果是运行期应该可行。
不过这样耦合度有点高,dll 得事先知道这类存在。
补充:移动开发 , Qt