lxqt-panel源码分析(2019长期更新)

但是在14.0中全部是中文,很难查找
但是有一点]:在14.0的版本中可以修改ui文件例如修改 background 这个在ui文件里面是background但是在 真正程序运行的时候,是背景颜色 四个大字,应该是采用了字符串的转换,在修改background 为 hpybackground之后,在程序运行的地方也是出现了hpybackground,进一步证明了是采用了字符串转化.


lxqt-panel的目录结构

autostart
menu
panel
plugin-colorpicker
plugin-cpuload
…..(下面全是plugin-..)

其中基本全部的代码实现都在panel这个目录下
panel目录下是lxqt-panel的构建目录

lxqtpanel
-config
—addplugin

关于mainmenu的show出来是在lxqtpanel.cpp的showPopupMenu函数中

关于lxqt-panel
20190812
使用lxqt-panel0.14与lxqt-panel0.12的不同
首先就是在调试的过程中0.14会进入到一串汇编代码中
0.12在调试的时候没有出现过这种情况

第二点是12.0是比较基础的版本,在12.0上面基本全是英文,这些英文基本是在代码中是字符串,有标注的
那么在可以使用qt的查找功能 ctrl+shift+f5 来查找
但是在14.0中全部是中文,很难查找
但是有一点]:在14.0的版本中可以修改ui文件例如修改 background 这个在ui文件里面是background但是在 真正程序运行的时候,是背景颜色 四个大字,应该是采用了字符串的转换,在修改background 为 hpybackground之后,在程序运行的地方也是出现了hpybackground,进一步证明了是采用了字符串转化.


lxqt-panel的目录结构

autostart
menu
panel
plugin-colorpicker
plugin-cpuload
…..(下面全是plugin-..)

其中基本全部的代码实现都在panel这个目录下
panel目录下是lxqt-panel的构建目录

lxqtpanel
-config
—addplugin

关于mainmenu的show出来是在lxqtpanel.cpp的showPopupMenu函数中
应该也是关于

#

关于插件的
20190813
pm
调试 删除其中一个插件worldclock
1.删除lxqt-panel/plugin-worldclock 文件夹
2.提示 error :CMakeLists.txt:51 (include) 所以 vim CMakeLists.txt:51 (include) #51行

fatal error: ../plugin-worldclock/lxqtworldclock.h: 没有那个文件或目录
#include “../plugin-worldclock/lxqtworldclock.h” // worldclock
^~~~~~~~~~~
compilation terminated.
panel/CMakeFiles/lxqt-panel.dir/build.make:308: recipe for target ‘panel/CMakeFiles/lxqt-panel.dir/plugin.cpp.o’ failed
make[2]: *** [panel/CMakeFiles/lxqt-panel.dir/plugin.cpp.o] Error 1
CMakeFiles/Makefile2:1595: recipe for target ‘panel/CMakeFiles/lxqt-panel.dir/all’ failed
make[1]: *** [panel/CMakeFiles/lxqt-panel.dir/all] Error 2
Makefile:129: recipe for target ‘all’ failed
make: *** [all] Error 2

3.在plugin.cpp中
//#include “../plugin-worldclock/lxqtworldclock.h” // worldclock

这里show出来的是 管理小部件这个栏的 添加小部件之后弹出来的添加框
void ConfigPluginsWidget::showAddPluginDialog()
{
if (mAddPluginDialog.isNull())
{
mAddPluginDialog.reset(new AddPluginDialog);
connect(mAddPluginDialog.data(), &AddPluginDialog::pluginSelected,
mPanel->mPlugins.data(), &PanelPluginsModel::addPlugin);
}
mAddPluginDialog->show();
mAddPluginDialog->raise();
mAddPluginDialog->activateWindow();
}

20190814

注释掉CMakeLists.txt的其中几行
因为list(APPEND STATIC_PLUGINS “worldclock”)这里的worldclock是没有办法改动的,一旦改动就报错

setByDefault(WORLDCLOCK_PLUGIN Yes)

if(WORLDCLOCK_PLUGIN)

list(APPEND STATIC_PLUGINS “worldclock”)

add_definitions(-DWITH_WORLDCLOCK_PLUGIN)

list(APPEND ENABLED_PLUGINS “hpy Clock”)

add_subdirectory(plugin-hpyclock)

endif(WORLDCLOCK_PLUGIN)

这个时候在任务栏中worldclock这个插件就消失了,并且在配置面板中worldclock也变成了unknown(worldclock)


20190815

由于在修改插件的过程中
遇到Warning: “Plugin worldclock not found in the” (“”, “/usr/local/lib/lxqt-panel”)
找到源头

if (!isLoaded())
{
if (!found)
qWarning() << QString(“Plugin %1 not found in the”).arg(desktopFile.id()) << dirs;

    return;
}

这里的desktopFile.id就是worldclock 这个插件

关于id
在lxqtplugin.h文件中
QString id() const { return mId; }
找到mId
无法看到lxqtplugininfo.cpp
找到lxqtplugininfo.h所在文件夹

$dpkg -S lxqtplugininfo.h
$liblxqt0-dev: /usr/include/lxqt/LXQt/lxqtplugininfo.h
$apt-get source liblxqt0-dev

在lxqtplugininfo.cpp中
——————————————————————————————————————————————
bool PluginInfo::load(const QString& fileName)

{

XdgDesktopFile::load(fileName);

mId = QFileInfo(fileName).completeBaseName();

return isValid();

}
——————————————————————————————————————————————

/*!
* \brief pluginNames returns a list of names for all the Plugins in
* this panel. The names are not the human-readable names but the names
* that are used to identify the Plugins, e.g. in the config files. These
* names can be used in the method pluginByName() to get a corresponding
* Plugin.
*
* The plugin names are normally chosen to be equal to the
* filename of the corresponding *.desktop-file. If multiple instances
* of a single plugin-type are created, their names are created by
* appending increasing numbers, e.g. ‘mainmenu’ and ‘mainmenu2’.
*
* \sa findNewPluginSettingsGroup
*/
QStringList pluginNames() const;
brief pluginNames返回此面板中所有插件的名称列表。 名称不是人类可读的名称,而是用于标识插件的名称,例如 在配置文件中。 可以在方法pluginByName()中使用这些名称来获取相应的插件。

通常选择插件名称等于相应* .desktop文件的文件名。 如果创建了单个插件类型的多个实例,则通过附加增加的数字来创建它们的名称,例如, ‘mainmenu’和’mainmenu2’。

sa findNewPluginSettingsGroup

发表评论

电子邮件地址不会被公开。 必填项已用*标注