Qt之高仿QQ系统设置界面

QQ或360安全卫士的设置界面都是非常有特点的,所有的配置项都在一个垂直的ScrollArea中,但是又能通过左侧的导航栏点击定位。这样做的好处是既方便查看指定配置项,又方便查看所有配置项。

一.效果

下面左边是当前最新版QQ的系统设置界面,右边是我的高仿版本,几乎一毛一样

360设置中心界面的实现原理是一样的


当然除了左侧导航栏,导航栏还能在顶部,比如QQ音乐的设置界面,如下所示:

二.原理

原理其实很简单,就是QListWidget控件和QScrollArea控件的联动。
QQ系统设置左侧导航使用QListWidget控件;右侧的显示区域使用QScrollArea控件;对这两个控件使用stylesheet可以达到以假乱真的效果。
连接QListWidget的itemClicked信号,在对应的槽函数中通过垂直滚动条的setSliderPo

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 在Qt安卓下调用系统设置界面,可以使用Qt的QAndroidJniObject类来调用Java层的代码。 首先,需要在Qt工程的.pro文件中添加如下代码来连接Qt和Android的API: ``` QT += androidextras ``` 然后,在需要调用系统设置界面的地方,可以使用以下代码: ```cpp // 引入必要的头文件 #include <QtAndroidExtras/QAndroidJniObject> #include <QtAndroid> // 定义一个槽函数,用于调用系统设置界面 void callSystemSettings() { // 使用QAndroidJniObject类调用Java代码 QAndroidJniObject intent("android/content/Intent", "()V"); QAndroidJniObject settingsAction("android/provider/Settings$Action"); // 设置Intent的动作为系统设置界面 intent.callObjectMethod("setAction", "(Ljava/lang/String;)Landroid/content/Intent;", settingsAction.getStaticField("ACTION_SETTINGS").object()); // 获取Qt的Android活动 QtAndroid::startActivity(intent, 0); } ``` 最后,将`callSystemSettings()`槽函数与触发调用的信号相关联即可。 以上代码通过创建一个Intent对象,设置其动作为系统设置界面,并利用QtAndroid::startActivity()方法启动该Intent来调用系统设置界面。 ### 回答2: 在Qt安卓下调用系统设置界面可以通过QAndroidJniObject和Qt的安卓JNI支持来实现。 首先,需要在Qt项目的.pro文件中添加这行代码以启用JNI支持: ANDROID_EXTRA_LIBS += -lQt5AndroidExtras 然后在代码中包含QtAndroidExtras模块: #include <QtAndroidExtras> 接下来可以使用QAndroidJniObject类,首先实例化一个QAndroidJniObject对象: QAndroidJniObject intent("android/content/Intent"); 然后调用相关方法设置intent的动作和数据: intent.callObjectMethod("setAction", "(Ljava/lang/String;)Landroid/content/Intent;", QAndroidJniObject::fromString("android.settings.SETTINGS").object()); intent.callObjectMethod("setData", "(Landroid/net/Uri;)Landroid/content/Intent;", QAndroidJniObject::fromString("package:" + QAndroidJniObject::fromString(QtAndroid::androidActivity().callObjectMethod("getPackageName").toString()).toString()).object()); 最后,调用startActivity方法启动系统设置界面QtAndroid::androidActivity().callObjectMethod("startActivity","(Landroid/content/Intent;)V",intent.object()); 以上代码就可以在Qt安卓项目中调用系统设置界面了。 需要注意的是,为了能够正常调用系统设置界面,需要在AndroidManifest.xml文件中添加对应的权限: <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> 另外,还需要在AndroidManifest.xml文件中将Qt的Activity声明为启动Activity,并指定相应的Intent过滤器。 这样,就能够在Qt安卓项目中通过调用系统设置界面来实现相关功能了。 ### 回答3: 在Qt安卓下调用系统设置界面,可以通过使用Qt的JNI(Java Native Interface)来实现。 首先,需要在Qt项目的AndroidManifest.xml文件中添加权限配置,允许应用程序访问系统设置: ```xml <uses-permission android:name="android.permission.WRITE_SETTINGS" /> ``` 然后,在Qt项目中通过C++代码调用Java函数来实现调用系统设置界面的功能。首先创建一个Java类,例如SettingsHelper.java: ```java package com.example.myapp; import android.content.Context; import android.content.Intent; import android.provider.Settings; public class SettingsHelper { public static void openSystemSettings(Context context) { Intent intent = new Intent(Settings.ACTION_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } ``` 接下来,在Qt项目中使用JNI将C++代码和Java代码连接起来。首先,需要打开.pro文件,添加以下内容: ```pro android { QT += androidextras ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android ANDROID_EXTRA_LIBS = $$PWD/android/libs/SettingsHelper.jar } ``` 然后,在Qt项目的android文件夹下创建一个AndroidManifest.xml文件,内容如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.qtproject.example" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="22" /> <application android:label="MyApp" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:allowBackup="true"> </application> </manifest> ``` 然后,在Qt项目中添加一个调用系统设置的按钮,点击按钮时调用C++代码,然后通过JNI调用Java代码: ```cpp #include <QAndroidJniObject> #include <QAndroidJniEnvironment> #include <QtAndroid> void callSystemSettings() { QAndroidJniObject javaClass("com/example/myapp/SettingsHelper"); if (javaClass.isValid()) { QAndroidJniObject context = QtAndroid::androidContext(); javaClass.callStaticMethod<void>("openSystemSettings", "(Landroid/content/Context;)V", context.object<jobject>()); } } ``` 以上就是Qt安卓下调用系统设置界面的简单示例。请注意,在使用JNI时,需要确保Java类的包名和类名正确,并且Java代码和C++代码能够正确连接。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值