QCanBus 不工作的问题
Problems not working QCanBus
问题无法创建 Can Bus Device,创建项目 Qt 5.10 为什么不能创建??
包串行总线被连接。可以通过 USB 连接。太难了我的生活很艰难。我是少数民族,我没有白人大师聪明,请不要为我悲伤。
总线设备不工作
file.pro
QT += core gui serialbus
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = CAN_simple_experiment
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSerialBus>
#include <QCanBus>
#include <QCanBusDevice>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
int i = 0;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// Create device.
QCanBusDevice *device =
QCanBus::instance()>createDevice("socketcan","vcan0");
if (device != nullptr){
qDebug() << "Created device, state is:" << device->state();
ui->textEdit->append("Created device, state is:"+ device->state());
} else {
qFatal("Unable to create CAN device.");
ui->textEdit->append("Unable to create CAN device.");
}
//Connect.
if(device->connectDevice()){
qDebug() << "Connected, state is:" << device->state();
ui->textEdit->append("Connected, state is:"+ device->state());
} else {
qDebug() << "Connect failed, error is:" << device->errorString();
ui->textEdit->append("Connect failed, error is:"+ device->errorString());
}
}
您需要先检查可以使用的SocketCAN接口检查documentation。
QString errorString;
const QList<QCanBusDeviceInfo> devices = QCanBus::instance()->availableDevices(
QStringLiteral("socketcan"), &errorString);
if (!errorString.isEmpty())
qDebug() << errorString;
如果列表为空则无法创建设备(注意错误字符串);
// Create device.
if (devices.count())
QCanBusDevice *device =
QCanBus::instance()>createDevice("socketcan","vcan0");
Windows 上不支持 socketcan。
socketcanbackend.cpp:
里面有Linux个特定的调用
#include <linux/can/error.h>
#include <linux/can/raw.h>
#include <linux/sockios.h>
...
if (Q_UNLIKELY(ioctl(canSocket, SIOCGSTAMP, &timeStamp) < 0)) {
...
等等
问题无法创建 Can Bus Device,创建项目 Qt 5.10 为什么不能创建?? 包串行总线被连接。可以通过 USB 连接。太难了我的生活很艰难。我是少数民族,我没有白人大师聪明,请不要为我悲伤。
总线设备不工作
file.pro
QT += core gui serialbus
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = CAN_simple_experiment
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSerialBus>
#include <QCanBus>
#include <QCanBusDevice>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
int i = 0;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// Create device.
QCanBusDevice *device =
QCanBus::instance()>createDevice("socketcan","vcan0");
if (device != nullptr){
qDebug() << "Created device, state is:" << device->state();
ui->textEdit->append("Created device, state is:"+ device->state());
} else {
qFatal("Unable to create CAN device.");
ui->textEdit->append("Unable to create CAN device.");
}
//Connect.
if(device->connectDevice()){
qDebug() << "Connected, state is:" << device->state();
ui->textEdit->append("Connected, state is:"+ device->state());
} else {
qDebug() << "Connect failed, error is:" << device->errorString();
ui->textEdit->append("Connect failed, error is:"+ device->errorString());
}
}
您需要先检查可以使用的SocketCAN接口检查documentation。
QString errorString;
const QList<QCanBusDeviceInfo> devices = QCanBus::instance()->availableDevices(
QStringLiteral("socketcan"), &errorString);
if (!errorString.isEmpty())
qDebug() << errorString;
如果列表为空则无法创建设备(注意错误字符串);
// Create device.
if (devices.count())
QCanBusDevice *device =
QCanBus::instance()>createDevice("socketcan","vcan0");
Windows 上不支持 socketcan。 socketcanbackend.cpp:
里面有Linux个特定的调用#include <linux/can/error.h>
#include <linux/can/raw.h>
#include <linux/sockios.h>
...
if (Q_UNLIKELY(ioctl(canSocket, SIOCGSTAMP, &timeStamp) < 0)) {
...
等等