2017-09-20 5 views
0

ディレクトリ構成は以下のとおりです。QT共有ライブラリが外部ラッパーを使用してプレス私のプロジェクトの

QtProject: 
    Form Files -> mainInterface.ui  // Directory structure   
    Generated Files -> ui_mainInterface.h // Directory structure 
    Header Files -> QTMainUI.h // Directory structure 
       -> qtmainui_global.h // Directory structure 
    Source Files -> QTMainUI.cpp // Directory structure 

//Wrapper to execute or get callback from QT shared library 
testWrapperMain: 
     Source Files -> testWtrapperMain.cpp 

testWtrapperMain.cpp

int main(int argc, char** argv) 
{ 
    QApplication app(argc, argv); 
    QMainWindow *widget = new QMainWindow; 
    ui.setupUi(widget); 
    widget->show(); 
    app.exec(); 
    return 0; 
} 

ui_mainInterface .hはQTデザイナーツールによって作成され、UIファイルを再コンパイルすると、このファイルで行われたすべての変更が失われます。

ui_mainInterface.h

class Ui_MainWindow 
{ 
public: 
    QWidget *centralwidget; 
    QPushButton *pushButton; 
    QPushButton *pushButton_2; 
    QTextBrowser *textBrowser; 
    QMenuBar *menubar; 
    QStatusBar *statusbar; 

    void setupUi(QMainWindow *MainWindow) 
    { 
     if (MainWindow->objectName().isEmpty()) 
      MainWindow->setObjectName(QStringLiteral("MainWindow")); 
     MainWindow->resize(640, 417); 
     centralwidget = new QWidget(MainWindow); 
     centralwidget->setObjectName(QStringLiteral("centralwidget")); 
     pushButton = new QPushButton(centralwidget); 
     pushButton->setObjectName(QStringLiteral("pushButton")); 
     pushButton->setGeometry(QRect(60, 60, 111, 31)); 
     pushButton_2 = new QPushButton(centralwidget); 
     pushButton_2->setObjectName(QStringLiteral("pushButton_2")); 
     pushButton_2->setGeometry(QRect(230, 60, 111, 31)); 
     textBrowser = new QTextBrowser(centralwidget); 
     textBrowser->setObjectName(QStringLiteral("textBrowser")); 
     textBrowser->setGeometry(QRect(40, 120, 551, 211)); 
     MainWindow->setCentralWidget(centralwidget); 
     menubar = new QMenuBar(MainWindow); 
     menubar->setObjectName(QStringLiteral("menubar")); 
     menubar->setGeometry(QRect(0, 0, 640, 21)); 
     MainWindow->setMenuBar(menubar); 
     statusbar = new QStatusBar(MainWindow); 
     statusbar->setObjectName(QStringLiteral("statusbar")); 
     MainWindow->setStatusBar(statusbar); 

     retranslateUi(MainWindow); 
     QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(play())); 
     QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(play())); 

     QMetaObject::connectSlotsByName(MainWindow); 
    } // setupUi 

    void retranslateUi(QMainWindow *MainWindow) 
    { 
     MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0)); 
     pushButton->setText(QApplication::translate("MainWindow", "CHECK STATUS", 0)); 
     pushButton_2->setText(QApplication::translate("MainWindow", "REGISTRATION", 0)); 
    } // retranslateUi 

}; 

namespace Ui { 
    class MainWindow: public Ui_MainWindow {}; 
} // namespace Ui 

//このファイルには、我々が与えtestWrapperMain.exeファイルを実行すると

Ui::MainWindow ui; 

class QTMAINUI_EXPORT QTMainUI :public Ui_MainWindow, public QObject 
{ 
    Q_OBJECT 
public: 
    QTMainUI(); 

    public slots: 
    void play(){ 
     cout << "\n CLicked"; 
    } 
}; 

スロット(コールバックに) QTMainUi.hを取得するためでありますconsolエラー(

QObject::connect: No such slot QMainWindow::play() in e:\qtmanagementclient\qtma 
inui\qtmainui\generatedfiles\ui_maininterface.h:62 
QObject::connect: (sender name: 'pushButton') 
QObject::connect: (receiver name: 'MainWindow') 
QObject::connect: No such slot QMainWindow::play() in e:\qtmanagementclient\qtma 
inui\qtmainui\generatedfiles\ui_maininterface.h:63 
QObject::connect: (sender name: 'pushButton_2') 
QObject::connect: (receiver name: 'MainWindow') 

実際の問題は、テストラッパーでコールバックまたはスロットを取得する方法ですか?

このタスクを実行するためのスロット以外の代替アプローチがありますか。

私の要件は、プッシュボタンとテキストブラウザを使用することです。別のアプリケーションからボタンを押すと、テキストブラウザにテキストを表示したいと思います。私はアプリケーションを変更することはできませんが、guiをdllとして作成すると思います。プッシュボタンではテキストを表示します。

答えて

0

ではなく、試してみてください:あなたは、オブジェクトのSLOTにアクセスしているよう

QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(play())); 

thisMainWindowを交換します。

+0

これを渡している間、オーバーロードされた関数のエラーインスタンスは引数リストと一致しません。 3番目のパラメータはUi_MainWindow *です。 –

+0

'QtMainUI'にはどのような変数が割り当てられていますか? – WLGfx

+0

あなたのコメントのためにWLGfxに感謝します。これをWLGfxの代わりに –

関連する問題