2017-09-20 1 views
0

Structure du répertoire de mon projet est:bibliothèque partagée QT en utilisant Visual Studio 2013 Addin, comment mettre à jour le texte sur le bouton poussoir bossée avec enveloppe externe

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 est créé par l'outil de conception QT dont toutes les modifications apportées dans ce fichier seront perdues lors de la recompilation du fichier de l'interface utilisateur.

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 

// Ce fichier est pour obtenir des fentes (callback) QTMainUi.h

Ui::MainWindow ui; 

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

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

Lorsque nous courons testWrapperMain.exe fichier qui donne une erreur sur consol ie

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') 

Le problème réel est comment obtenir le rappel ou l'emplacement dans l'encapsuleur de test?

Y a-t-il une autre approche en dehors des emplacements pour effectuer cette tâche?

Mon exigence est que je vais avoir des boutons poussoirs et un navigateur de texte. J'ai créé la bibliothèque partagée avec lui, Sur appuyant sur le bouton de l'application différente, je veux afficher du texte sur le navigateur de texte. Je ne peux pas changer mon application mais penser à créer le gui comme dll et sur l'appel de bouton-poussoir je montrerai le texte.

Répondre

0

Essayez plutôt:

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

remplacement MainWindow avec this que vous accédez à la SLOT d'un objet.

+0

En passant cela, nous recevons error.nom de fonction surchargée correspond à la liste d'arguments. Le troisième paramètre est Ui_MainWindow *. –

+0

Quelle variable est assignée à 'QtMainUI'? – WLGfx

+0

salut WLGfx merci pour votre commentaire. Passer au lieu de –