将自定义 widget 嵌入 Kuix 界面

将自定义 widget 嵌入 Kuix 界面

        在上一篇博客《在 Kuix 框架下绘制自己定义的画布》中,我们谈论了如何在以低级界面实现的 Kuix 框架下绘制自定义画布,以及自定义画布用户事件的加入的问题。我们已经可以使用 Kuix 按照我们的意图来运行自定义的低级界面了。然而关于自定义画布的调用,采用的是显式地 new 的方法:

        这样做不足之处有二:其一,我们自定义的 widget 没有返回按钮,没有标题。也就是说,我们的 widget 全屏显示了,而且没有任何按钮来让用户返回上一步操作,而且也没有标题通知用户当前操作所处的位置;其二,Kuix 所有的界面可以使用 Screen 从 xml 配置文件中读取,也就是说我们看到的任何组件,都可以在 xml 文件中进行配置。显式地 new 出 widget,显然与 Kuix 的框架思路背道而驰。
        如何将自定义 widget 在 kuix 的 xml 文件中进行配置?如何调用我们自定义的 widget?如何将自定义 widget 嵌入 Kuix 界面,和其他 Kuix 组件(比如按钮等)一起显示?我们就在这篇博客中详细地讨论解决这些问题的步骤。
        仍然采用我们在上一篇博客中写的自定义的 widget 的例子,PmapWidget.java 的源代码不变。但是其子类 ChildPmapWidget.java 的源码略有改动。改动后的源代码如下:


        定义一个 Frame,MovMapFrame 来负责显示我们自定义的 widget:


        在项目的 res 下的 xml 文件夹中 加入 CustomMap.xml,其源代码如下:


        然后在我们的 KuixMIDlet 程序中将其父类 org.kalmeo.kuix.core.KuixMIDlet 的 createNewConverterInstance 方法重写:

        运行程序,效果图如下:

运行效果图
        进入这个界面后,我们按下向上键,或者长按向左键,泡泡已经可以运动了;而当我们按下“上一步”按钮后,也可以返回上一个 Frame 了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要创建两个自定义widget类,分别为CustomWidget1和CustomWidget2,并在其中添加你需要的控件,如按钮和标签等。 然后在CustomWidget1中,重载鼠标点击事件的函数,当点击CustomWidget1时,改变CustomWidget1的边框颜色。具体实现代码如下: ```cpp void CustomWidget1::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); QPalette pal = this->palette(); pal.setColor(QPalette::Window, QColor(Qt::red)); // 将窗口颜色设置为红色 this->setPalette(pal); } ``` 在自定义的按钮的槽函数中,创建CustomWidget2的实例,并显示出来。具体实现代码如下: ```cpp void CustomWidget1::onButtonClicked() { CustomWidget2 *widget2 = new CustomWidget2(this); widget2->show(); } ``` 最后,在主程序中,将CustomWidget1添加到窗口中即可。完整的示例代码如下: ```cpp // CustomWidget1.h #include <QWidget> class CustomWidget1 : public QWidget { Q_OBJECT public: explicit CustomWidget1(QWidget *parent = nullptr); protected: void mousePressEvent(QMouseEvent *event) override; private slots: void onButtonClicked(); private: QPushButton *m_button; QLabel *m_label; }; // CustomWidget1.cpp #include "CustomWidget1.h" #include "CustomWidget2.h" CustomWidget1::CustomWidget1(QWidget *parent) : QWidget(parent) { m_button = new QPushButton("Click me", this); m_label = new QLabel("Hello world", this); connect(m_button, &QPushButton::clicked, this, &CustomWidget1::onButtonClicked); } void CustomWidget1::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); QPalette pal = this->palette(); pal.setColor(QPalette::Window, QColor(Qt::red)); // 将窗口颜色设置为红色 this->setPalette(pal); } void CustomWidget1::onButtonClicked() { CustomWidget2 *widget2 = new CustomWidget2(this); widget2->show(); } // CustomWidget2.h #include <QWidget> class CustomWidget2 : public QWidget { Q_OBJECT public: explicit CustomWidget2(QWidget *parent = nullptr); }; // CustomWidget2.cpp #include "CustomWidget2.h" CustomWidget2::CustomWidget2(QWidget *parent) : QWidget(parent) { QLabel *label = new QLabel("This is CustomWidget2", this); } // main.cpp #include <QApplication> #include "CustomWidget1.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); CustomWidget1 widget1; widget1.show(); return a.exec(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值