我正在制作一个简单的GUI程序来改变Android手机的bootanimation但是从最近4天我面临一个问题我不知道什么是原因,这是我的代码
void MainWindow::bootanim1()
{
QProcess rootboot;
QStringList path6,boottarget;
path6<<ui->lineEdit_6->text();
boottarget<<path6<<" /system/media";
ui->textBrowser->clear();
ui->textBrowser->setText("Remounting partitions...");
rootboot.start("bbin\\adb shell su -c \"busybox mount -o remount,rw /system\"");
rootboot.waitForFinished();
ui->textBrowser->setText("\nInstalling bootanimation.zip");
rootboot.start("bbin\\adb push ",boottarget);
rootboot.waitForFinished();
ui->textBrowser->setText("\nBootanimation has been changed! Try shutting down your phone to see new bootanimation");
}
单击按钮时会启动此功能,但问题是,这不起作用!其次,您可以在代码中看到更多信息,我使用了textBrowser
来显示用户最新进行的重新安装分区等,而lineEdit_6
是用户将粘贴的lineEdit
小部件bootanimation.zip的路径。所以我的问题是,当我单击按钮时,只显示
Bootanimation has been changed! Try shutting down your phone to see new bootanimation
我认为上面的一切都被忽略了,我不知道为什么?谁能给我一些暗示我缺少的东西?
答案 0 :(得分:1)
在这里,您要混合两种不同的方法来为QProcess提供参数:
boottarget<<path6<<" /system/media";
rootboot.start("bbin\\adb push ",boottarget);
First method在一个QString中提供程序名称和参数。
Second method在QStringList中提供参数。
您正尝试在程序名称字符串中提供一个参数(“push”)。当在QStringList中给出其他参数时,它不起作用。最后一个参数在开头也包含可疑的空间,虽然我不知道它是否会导致问题。试试这个:
QStringList args;
args << "push" << path6 << "/system/media";
rootboot.start("bbin\\adb", args);
而path6变量可能应该是QString而不是QStringList。
答案 1 :(得分:0)
Ui要求eventloop刷新自己。当您在一个函数调用中执行所有更改时,只有内部属性更改,并且gui本身不会重新绘制。在每个QCoreApplication::processEvents();
ui->textBrowser->setText(...);