我正在尝试学习如何为Linux系统编写模块和驱动程序.与此问题类似,我试图在USB键盘热插拔上运行一个简单的"Hello World"模块(下面的代码).即使通过命令初始化模块insmode并且modprobe似乎工作(dmesg显示调试消息),插入键盘时也不会加载模块.
我做了什么:
make以生成hellomodule.ko文件.hellomodule.ko文件复制到/ lib/modules /"my_kernel_version"/depmod -a命令.这三个步骤后,我有我的模块添加modules.alias和modules.dep文件.它仍然无法正常工作.
这个内核配置是故障还是完全不同?
系统:Ubuntu 14.04 LTS ; 内核:3.14.0
hellomodule.c:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <linux/hid.h>
MODULE_AUTHOR("author");
MODULE_DESCRIPTION("helloworld module\n");
MODULE_LICENSE("GPL");
static struct usb_device_id hello_id_table [] = {
{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID,
USB_INTERFACE_SUBCLASS_BOOT,
USB_INTERFACE_PROTOCOL_KEYBOARD) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE (usb, hello_id_table);
static int hello_probe(struct …Run Code Online (Sandbox Code Playgroud) 我有一个QML应用程序,其中我正在尝试一个显示当前时间的简单时钟 - 与每个操作系统中的类似.
时间应该作为文本格式呈现给用户hh:mm,即 16:12.
目前我正在尝试在应用程序生命周期内运行Timer组件并通过调用更新文本的解决方案:
timeText.text = Qt.formatTime(new Date(),"hh:mm")
每60秒一次.有没有更好的方法来执行此操作或使用Timer组件是必要的.
整个代码的代码段:
Text {
id: timeText
x: 10
y: 10
text: Qt.formatTime(new Date(),"hh:mm")
}
Timer {
id: timer
interval: 60000
repeat: true
running: true
onTriggered:
{
timeText.text = Qt.formatTime(new Date(),"hh:mm")
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个QTabWidget,动态添加和删除了标签.我还将QToolButton设置为角落小部件,以便处理其clicked()信号上的添加事件.
虽然添加工作完全正常,从窗口小部件中删除所有选项卡会导致按钮消失.我已经尝试使用样式表来创建一个宽度为0的隐形第一个标签,但这种方法让我失望.可能是因为我setTabsClosable(true)在所有选项卡上都有关闭按钮的空间.
当没有标签时,当QTabBar将其高度折叠为0时,我还认为按钮正在消失.我试过,tabBar()->setMinimumHeight(30);但这种解决方法也没有用.有任何想法吗?
这里我的代码示例再现了问题:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QToolButton"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tabWidget->setTabsClosable(true);
ui->tabWidget->tabBar()->setMinimumHeight(30);
QToolButton *btn = new QToolButton(ui->tabWidget);
btn->setText("Add new");
btn->setCursor(Qt::ArrowCursor);
btn->setAutoRaise(true);
ui->tabWidget->setCornerWidget(btn, Qt::TopLeftCorner);
qDebug() << ui->tabWidget->cornerWidget(Qt::TopLeftCorner);
connect(ui->tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
//SLOT
void MainWindow::closeTab(int index)
{
ui->tabWidget->removeTab(index);
if(ui->tabWidget->count() == 0)
qDebug() << ui->tabWidget->cornerWidget(Qt::TopLeftCorner);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用QAudioDecoder类解码.wav文件。尽管我通过添加将QtMultimedia模块包含到我的.pro文件中,
但我收到了一个错误,即未找到QAudioDecoder 的服务。我看不出问题出在哪里。QT += multimedia
我在 Windows 7 上使用 Qt 5.1.0 和 MingGW 4.8 32 位。
错误信息:
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.audiodecode"
.pro文件:
QT += core
QT += multimedia
QT -= gui
TARGET = test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)
主文件:
#include <QCoreApplication>
#include <QAudioDecoder>
#include <QAudioBuffer>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString pathToFile …Run Code Online (Sandbox Code Playgroud) 我有一个QGraphicsView和一个QGraphicsScene.根据用户输入,QGraphicsItem可以将一些放置在场景上.此项目既可选择又可移动.
当场景大于视图滚动条时(它们设置为在必要时显示).
当用户在视图边缘附近移动项目时,场景宽度/高度会相应地拉伸 - 我使场景变大.
问题是当项目靠近视图边界时,如何强制滚动条与场景一起滚动?我觉得在任何图形编辑器中都很常见.在MouseMoveEvent场景中我使场景变大,强制滑块移动并相应地更新可见矩形.
这不符合预期.即使认为卷轴正在调整到新的场景大小,视图中也没有平滑的移动.这样做有更好的方法吗?
一些解释:
itemUnderCursor = currently slected QGraphicsItem
qgv = QGraphicsView
Run Code Online (Sandbox Code Playgroud)
代码段:
// check if item is near the border
QPointF point = itemUnderCursor->mapToScene(itemUnderCursor->boundingRect().topLeft());
double delta = 0;
if(point.x() < visibleRect.left())
{
// prevent from drawing outside the scene
itemUnderCursor->setPos(visibleRect.left(), itemUnderCursor->scenePos().y());
if(event->scenePos().x() < oldMousePos.x()-3)
{
// stretch the scene
if(qgv->horizontalScrollBar()->value() <= 0)
setSceneRect(QRectF(QPointF(sceneRect().x() - 3, sceneRect().y()), sceneRect().bottomRight()));
/*
* disable signals from DrawingArea in order …Run Code Online (Sandbox Code Playgroud) 我有几个不同的类派生自QGraphicsItem或其子(如QGraphicsRectItem).我现在需要复制这些类的选定对象,而不知道我确切地复制了哪一个.
因为QGraphicsScene::selectedItems()我决定使用它返回所选项目的列表,但是我不能复制它,QGraphicsItem因为它是一个抽象类.为了解决这个问题,我试图使用malloc和复制对象memcpy.
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene();
item = new QGraphicsRectItem(50,50,50,50);
item->setFlag(QGraphicsItem::ItemIsSelectable);
scene->addItem(item);
item->setSelected(true);
ui->graphicsView->setScene(scene);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
for(QGraphicsItem *item : scene->selectedItems())
{
QGraphicsItem *copiedItem=(QGraphicsItem *)malloc(sizeof(*item));
memcpy(copiedItem, item, sizeof(*copiedItem));
copiedItem->moveBy(50, 50);
scene->addItem(copiedItem);
qDebug() << item;
qDebug() << copiedItem;
}
}
Run Code Online (Sandbox Code Playgroud)MainWindow.h
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT …Run Code Online (Sandbox Code Playgroud)