ディレクトリ構成は以下のとおりです。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として作成すると思います。プッシュボタンではテキストを表示します。
これを渡している間、オーバーロードされた関数のエラーインスタンスは引数リストと一致しません。 3番目のパラメータはUi_MainWindow *です。 –
'QtMainUI'にはどのような変数が割り当てられていますか? – WLGfx
あなたのコメントのためにWLGfxに感謝します。これをWLGfxの代わりに –