mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-05 08:45:25 +08:00
qt 6.5.1 original
This commit is contained in:
35
examples/widgets/tools/echoplugin/echowindow/CMakeLists.txt
Normal file
35
examples/widgets/tools/echoplugin/echowindow/CMakeLists.txt
Normal file
@ -0,0 +1,35 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
qt_add_executable(echopluginwindow
|
||||
echointerface.h
|
||||
echowindow.cpp echowindow.h
|
||||
main.cpp
|
||||
)
|
||||
|
||||
set_target_properties(echopluginwindow PROPERTIES
|
||||
WIN32_EXECUTABLE TRUE
|
||||
MACOSX_BUNDLE TRUE
|
||||
)
|
||||
|
||||
target_link_libraries(echopluginwindow PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::Gui
|
||||
Qt6::Widgets
|
||||
)
|
||||
|
||||
if(QT6_IS_SHARED_LIBS_BUILD)
|
||||
# Build the shared plugin too when building this example target.
|
||||
add_dependencies(echopluginwindow echoplugin)
|
||||
else()
|
||||
# Link the echoplugin if Qt is built statically.
|
||||
target_link_libraries(echopluginwindow PRIVATE
|
||||
echoplugin
|
||||
)
|
||||
endif()
|
||||
|
||||
install(TARGETS echopluginwindow
|
||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
)
|
27
examples/widgets/tools/echoplugin/echowindow/echointerface.h
Normal file
27
examples/widgets/tools/echoplugin/echowindow/echointerface.h
Normal file
@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#ifndef ECHOINTERFACE_H
|
||||
#define ECHOINTERFACE_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
//! [0]
|
||||
class EchoInterface
|
||||
{
|
||||
public:
|
||||
virtual ~EchoInterface() = default;
|
||||
virtual QString echo(const QString &message) = 0;
|
||||
};
|
||||
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#define EchoInterface_iid "org.qt-project.Qt.Examples.EchoInterface"
|
||||
|
||||
Q_DECLARE_INTERFACE(EchoInterface, EchoInterface_iid)
|
||||
QT_END_NAMESPACE
|
||||
|
||||
//! [0]
|
||||
#endif
|
90
examples/widgets/tools/echoplugin/echowindow/echowindow.cpp
Normal file
90
examples/widgets/tools/echoplugin/echowindow/echowindow.cpp
Normal file
@ -0,0 +1,90 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "echowindow.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
#include <QLabel>
|
||||
#include <QLayout>
|
||||
#include <QLineEdit>
|
||||
#include <QMessageBox>
|
||||
#include <QPluginLoader>
|
||||
#include <QPushButton>
|
||||
|
||||
//! [0]
|
||||
EchoWindow::EchoWindow()
|
||||
{
|
||||
createGUI();
|
||||
setLayout(layout);
|
||||
setWindowTitle("Echo Plugin Example");
|
||||
|
||||
if (!loadPlugin()) {
|
||||
QMessageBox::information(this, "Error", "Could not load the plugin");
|
||||
lineEdit->setEnabled(false);
|
||||
button->setEnabled(false);
|
||||
}
|
||||
}
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
void EchoWindow::sendEcho()
|
||||
{
|
||||
QString text = echoInterface->echo(lineEdit->text());
|
||||
label->setText(text);
|
||||
}
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
void EchoWindow::createGUI()
|
||||
{
|
||||
lineEdit = new QLineEdit;
|
||||
label = new QLabel;
|
||||
label->setFrameStyle(QFrame::Box | QFrame::Plain);
|
||||
button = new QPushButton(tr("Send Message"));
|
||||
|
||||
connect(lineEdit, &QLineEdit::editingFinished,
|
||||
this, &EchoWindow::sendEcho);
|
||||
connect(button, &QPushButton::clicked,
|
||||
this, &EchoWindow::sendEcho);
|
||||
|
||||
layout = new QGridLayout;
|
||||
layout->addWidget(new QLabel(tr("Message:")), 0, 0);
|
||||
layout->addWidget(lineEdit, 0, 1);
|
||||
layout->addWidget(new QLabel(tr("Answer:")), 1, 0);
|
||||
layout->addWidget(label, 1, 1);
|
||||
layout->addWidget(button, 2, 1, Qt::AlignRight);
|
||||
layout->setSizeConstraint(QLayout::SetFixedSize);
|
||||
}
|
||||
//! [2]
|
||||
|
||||
//! [3]
|
||||
bool EchoWindow::loadPlugin()
|
||||
{
|
||||
QDir pluginsDir(QCoreApplication::applicationDirPath());
|
||||
#if defined(Q_OS_WIN)
|
||||
if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
|
||||
pluginsDir.cdUp();
|
||||
#elif defined(Q_OS_MAC)
|
||||
if (pluginsDir.dirName() == "MacOS") {
|
||||
pluginsDir.cdUp();
|
||||
pluginsDir.cdUp();
|
||||
pluginsDir.cdUp();
|
||||
}
|
||||
#endif
|
||||
pluginsDir.cd("plugins");
|
||||
const QStringList entries = pluginsDir.entryList(QDir::Files);
|
||||
for (const QString &fileName : entries) {
|
||||
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
|
||||
QObject *plugin = pluginLoader.instance();
|
||||
if (plugin) {
|
||||
echoInterface = qobject_cast<EchoInterface *>(plugin);
|
||||
if (echoInterface)
|
||||
return true;
|
||||
pluginLoader.unload();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
//! [3]
|
42
examples/widgets/tools/echoplugin/echowindow/echowindow.h
Normal file
42
examples/widgets/tools/echoplugin/echowindow/echowindow.h
Normal file
@ -0,0 +1,42 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#ifndef ECHODIALOG_H
|
||||
#define ECHODIALOG_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include "echointerface.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QString;
|
||||
class QLineEdit;
|
||||
class QLabel;
|
||||
class QPushButton;
|
||||
class QGridLayout;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
//! [0]
|
||||
class EchoWindow : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
EchoWindow();
|
||||
|
||||
private slots:
|
||||
void sendEcho();
|
||||
|
||||
private:
|
||||
void createGUI();
|
||||
bool loadPlugin();
|
||||
|
||||
EchoInterface *echoInterface;
|
||||
QLineEdit *lineEdit;
|
||||
QLabel *label;
|
||||
QPushButton *button;
|
||||
QGridLayout *layout;
|
||||
};
|
||||
//! [0]
|
||||
|
||||
#endif
|
21
examples/widgets/tools/echoplugin/echowindow/echowindow.pro
Normal file
21
examples/widgets/tools/echoplugin/echowindow/echowindow.pro
Normal file
@ -0,0 +1,21 @@
|
||||
QT += widgets
|
||||
|
||||
HEADERS = echowindow.h \
|
||||
echointerface.h
|
||||
SOURCES = echowindow.cpp \
|
||||
main.cpp
|
||||
|
||||
TARGET = echoplugin
|
||||
QMAKE_PROJECT_NAME = echopluginwindow
|
||||
win32 {
|
||||
CONFIG(debug, release|debug):DESTDIR = ../debug/
|
||||
CONFIG(release, release|debug):DESTDIR = ../release/
|
||||
} else {
|
||||
DESTDIR = ../
|
||||
}
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
|
||||
INSTALLS += target
|
||||
|
||||
CONFIG += install_ok # Do not cargo-cult this!
|
19
examples/widgets/tools/echoplugin/echowindow/main.cpp
Normal file
19
examples/widgets/tools/echoplugin/echowindow/main.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
#include "echowindow.h"
|
||||
#include "echointerface.h"
|
||||
|
||||
//! [0]
|
||||
int main(int argv, char *args[])
|
||||
{
|
||||
QApplication app(argv, args);
|
||||
|
||||
EchoWindow window;
|
||||
window.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
//! [0]
|
Reference in New Issue
Block a user