当前位置:编程学习 > wap >>

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

#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 dll 界面 --------------------编程问答--------------------

我设想的是点击界面按钮,传出消息,然后我的程序接到消息,进行处理,再把结果传回到界面,我设了两个基本函数,一个是初始化,一个是刷新(图像处理的软件),调用他们实现界面刷新,不知道可行不
 希望大家帮我分析一下,我第一次做这个尝试,不是很懂,谢谢 --------------------编程问答-------------------- 你是指两个QT写的 App 之间 通信/交互?


传说中的 IPC ?

不知道 消息与槽能不能实现 IPC ,但用 Socket 是肯定可以啦

据说QT中的 QLocalServer和QLocalSocket 跟Windows中的NamePiple一样可以用来做IPC



--------------------编程问答-------------------- 回复2楼 
没有那么高端啦
我是不知道接口该怎么写,比较基础的部分
应该是纯虚函数的内容 --------------------编程问答-------------------- 可以使用信号槽 --------------------编程问答-------------------- 回复四楼
信号槽我懂,怎么把槽函数传出来呢 --------------------编程问答-------------------- 程序这样写不好吧,移植性就不好,怎么还把main函数给封装了...  高端 --------------------编程问答-------------------- 原来是这样的,哪可以玩点低级的

直接绕过 信号 槽机制

用最原始的 回调函数

控制台程序 调用 dll 时把一个回调函数指针给 dll

界面动作时 恰当时候 调用这个 回调函数就OK了


不过扩展一下(我没试过,想法而已)

能否控制台初始化时把一个封装了槽函数的类 this 指针传参给dll,dll的代码中有这个类的声明

这样dll中就可以连接 来自 控制台程序的 一个类的 槽了

问题是 Qt中 信号与槽绑定是运行期还是编译期决定的,如果是运行期应该可行。


不过这样耦合度有点高,dll 得事先知道这类存在。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,