• 1037阅读
  • 5回复

[提问]QT 怎么控制KIO口,接干接点信号用 [复制链接]

上一主题 下一主题
离线lankii
 

只看楼主 倒序阅读 楼主  发表于: 2024-10-09
百度给出一段代码,提示无效,这是什么模块第三方c++库?:

#include <KIO/NetAccessManager>
#include <KIO/NetworkOperation>

// 获取KIO的访问管理器
KIO::NetAccessManager *manager = KIO::NetAccessManager::defaultAccessManager();

// 创建一个下载操作
KIO::NetworkOperation *op = manager->get(QNetworkRequest(QUrl("http://example.com/file.txt")));

// 连接信号槽,以便在下载完成时接收通知
QObject::connect(op, &KIO::NetworkOperation::finished, [](KIO::NetworkOperation *op){
    if(op->error()){
        qDebug() << "Download failed:" << op->errorString();
    } else {
        qDebug() << "Download succeeded!";
        // 处理下载的数据
        QByteArray data = op->data();
    }
    // 清理操作对象
    delete op;
});

// 启动下载
op->start();
离线spygg

只看该作者 1楼 发表于: 2024-10-09
为什么不用Qt自带的呢? 这段代码一看就有问题:比如下载的文件是4G, 估计程序会因为内存爆表噶掉
签名就是这么浪
离线lankii

只看该作者 2楼 发表于: 2024-10-10
回 spygg 的帖子
spygg:为什么不用Qt自带的呢? 这段代码一看就有问题:比如下载的文件是4G, 估计程序会因为内存爆表噶掉 (2024-10-09 17:28) 

qt 有自带KIO口控制库吗??我关心的控制功能,昨天问工厂,只提供linux shell实现,想着靠system('shell')来搞了
GPIO 测试命令:
pio=88
echo $pio > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$pio/direction
echo 1 > /sys/class/gpio/gpio$pio/value ##K1 的电压为高电平echo 0 > /sys/class/gpio/gpio$pio/value ##K1 的电压低电平电压其它 GPIO 测试方如 K1 的方法一样。


离线lankii

只看该作者 3楼 发表于: 2024-10-10
linux 驱动写法
#define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))

int main(int argc, char * argv)
{
        int i, n, fd;
        char num,val;
        int ret;
        fd = open("/dev/kio", O_RDWR);                //打开设备
        if (fd < 0)
        {
            printf("can't open /dev/kio!\n");
            exit(1);
        }
        sleep(1);
        ioctl(fd, 1, GPIO_TO_PIN(1,22));                //设置gpio1-22为输出(user:led3)
        ioctl(fd, 0, GPIO_TO_PIN(2, 1));                //设置gpio2-1 为输入(p8-18)
        while (1)
        {
                num = 1;
                ret = write(fd,"1",GPIO_TO_PIN(1,22)); //置高
                if(ret < 0)
                {
                        perror("write");
                        return -1;
                }
                sleep(1);
                ret = write(fd,"0",GPIO_TO_PIN(1,22));//置低
                if(ret < 0)
                {
                    perror("write");
                    return -1;
     }

      ret = read(fd, &val, GPIO_TO_PIN(2,1)); //读取电平

             if(ret == 1) //高电平

                 printf("val==1\n");

             if(ret == 0) // 低电平

                 printf("val == 0 \n");

  }



离线spygg

只看该作者 4楼 发表于: 2024-10-10
回 lankii 的帖子
lankii:qt 有自带KIO口控制库吗??我关心的控制功能,昨天问工厂,只提供linux shell实现,想着靠system('shell')来搞了
GPIO 测试命令:
pio=88
echo $pio > /sys/class/gpio/export
....... (2024-10-10 08:07) 

如果是linux,那么一切皆是文件,用Python也可打开/dev/kio文件来进行读写,甚至就像你上面写的用sheel来控制写一个bash脚本都行就是了(不知道该文件是否为某个驱动所创建), 你搜的Qt的KIO库只是恰巧重名了吧
签名就是这么浪
离线lankii

只看该作者 5楼 发表于: 2024-10-10
已经实现功能,麻烦死:


bool MainWindow::getKIOInput(QString kio)
{

    if(kio.right(1)=="1")
        kio="88";
    else if(kio.right(1)=="2")
        kio="107";
    else if(kio.right(1)=="3")
        kio="89";
    else if(kio.right(1)=="4")
        kio="108";

    QString cmdstr=QString("sudo sh -c 'echo %1 > /sys/class/gpio/export'").arg(kio);
    qDebug()<<cmdstr;
    systemCMD(cmdstr);

     cmdstr=processCMD(QString("cat /sys/class/gpio/gpio%1/direction").arg(kio));
    if(cmdstr!="in"){
       cmdstr=QString("sudo sh -c 'echo in > /sys/class/gpio/gpio%1/direction'").arg(kio);
       systemCMD(cmdstr);
       systemCMD("sudo sh -c 'sleep 1'");
       qDebug()<<"go sleep1";
    }
     cmdstr=processCMD(QString("cat /sys/class/gpio/gpio%1/value").arg(kio));
     qDebug()<<"input value:"<<cmdstr;
     if(cmdstr=="1") return true; else return false;
}

// 设置输出IO口信号状态
void MainWindow::systemCMD(QString CMDstr)
{
    QByteArray byteArray = CMDstr.toLocal8Bit();

    const char* charStr = byteArray.constData();
    system(charStr);

}

// 设置输出IO口信号状态
QString MainWindow::processCMD(QString CMDstr)
{
      QProcess process;

       process.start(CMDstr);
       process.waitForFinished();

  return QString(process.readAllStandardOutput());
}
快速回复
限100 字节
 
上一个 下一个