ukui-screensaver/examples/LoadCustomPlugin/widget.cpp

47 lines
1.3 KiB
C++

#pragma execution_character_set("utf-8")
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QPluginLoader>
#include <QHBoxLayout>
#include <memory>
#include <ukui-screensaver/screensaverplugin.h>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->load_plugin_btn,SIGNAL(clicked(bool)),this, SLOT(slot_load_plugin()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::slot_load_plugin()
{
/*
QString file_path = QFileDialog::getOpenFileName(NULL,"加载插件",".","dll (*.dll *.so)");
if(file_path.isEmpty())
{
return;
}
*/
QPluginLoader pluginLoader("/usr/lib/ukui-screensaver/libscreensaver-default.so");
pluginLoader.load();
QObject* plugin = pluginLoader.instance();
if (plugin) {
std::unique_ptr<ScreensaverPlugin> interface_ptr = std::unique_ptr<ScreensaverPlugin>(qobject_cast<ScreensaverPlugin*>(plugin));
QWidget* widget = interface_ptr->createWidget(false,this);
widget->setFixedHeight(180);
widget->setFixedWidth(300);
QHBoxLayout* mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(widget);
ui->widget->setLayout(mainLayout);
}
}