gpt4 book ai didi

c++ - QT根据串行接口(interface)上​​的输入显示不同的图像

转载 作者:行者123 更新时间:2023-11-28 04:19:08 24 4
gpt4 key购买 nike

我是 QT 的新手,我正在尝试创建一个程序来根据串行接口(interface)的输入显示不同的图像。

我意识到有很多方法可以实现这一点,我正在寻找具有 QT 经验的人的意见。

我的想法是将新数据发送到一个比较函数,该函数将一个整数返回给主函数,这个整数将决定将显示什么图片。但是,使用 while 循环会导致图片被重新绘制,而不是静态的。

我的问题是,我应该为图像查看器启动另一个线程,还是为其使用不同的类?

或者这种方法很可怕,我应该重新开始吗?

感谢任何输入!


if(!serial.open(QIODevice::ReadOnly))
qDebug() << serial.errorString();
QObject::connect(&serial, &QSerialPort::readyRead, [&]
{
int comp=0;
int landscape =1;
int total_data = serial.bytesAvailable();
qDebug() << "New data Available: " << serial.bytesAvailable();
QByteArray datas = serial.readAll();
comp= compare(total_data,datas);
while(comp == landscape){
qDebug() << "I Picture";
QLabel label("<img src='landscape.jpg' /> ");
label.show();
}
qDebug() << datas;
});

这是从串口读取数据的比较函数


int compare(int x, QByteArray y)
{
int r=0;

for(int i = 0; i <= x ; i++){

if (strncmp (y, "\x00",1) ==0)
{
//picture();
r=1;
return r;
}
}
return r;
}

最佳答案

这样做:

while(comp == landscape){
qDebug() << "I Picture";
QLabel label("<img src='landscape.jpg' /> ");
label.show();
}

您正在堆栈上创建本地 QLabel。它将在每次迭代时被销毁。

Qt 使用自己的机制来更新其对象(事件循环),您只需在需要时更改 QLabel 中的图片即可。

因此,您可以做的是在您的小部件中创建一个 QLabel 并更改您插槽中的图像:

class Window: public QWidget
{
Q_OBJECT
public:
enum ImageType {
landscape = 1,
};
Window(QObject* parent=nullptr): QWidget(parent),
myLabel(new QLabel(this))
{
if(!serial.open(QIODevice::ReadOnly))
qDebug() << serial.errorString();
connect(&serial, &QSerialPort::readyRead, this, &Window::updateImage);
}
public slots:
void updateImage()
{
int total_data = serial.bytesAvailable();
qDebug() << "New data Available: " << serial.bytesAvailable();
QByteArray datas = serial.readAll();
int const comp = compare(total_data,datas);
if (comp == Window::landscape)
myLabel->setPixmap("landscape.png");
else
myLabel->setPixmap("anotherImg.png");
qDebug() << datas;
}
private:
QLabel* myLabel;
QSerialPort serial;
};

关于c++ - QT根据串行接口(interface)上​​的输入显示不同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com