小编dar*_*ept的帖子

QObject,qRegisterMetaType和私有拷贝构造函数的子类

我有一个类是QObject的子类,我想将其注册为元类型.该QObject的文档 指出拷贝构造函数应该是私有的,但QMetaType文件指出,一个类型应该有一个公共的默认构造函数,一个公共的拷贝构造函数和析构函数公开.

我可以覆盖QObject的私有拷贝构造函数并声明一个公共拷贝构造函数,但这是安全/ ok /对吗?

class MyClass : public QObject {
  Q_OBJECT
  public:
    MyClass();
    MyClass(const MyClass &other);
    ~MyClass();
}
Q_DECLARE_METATYPE(MyClass);
Run Code Online (Sandbox Code Playgroud)

qt4

10
推荐指数
2
解决办法
7021
查看次数

插入表格视图,添加按钮或空行时最好的是什么?

当我们看到一个简单的表格视图(甚至是我认为的列表视图)时,您首选的输入新数据的方法是什么.

使用这样的添加/删除按钮: 用按钮

或者用一个空行表示这样的新记录: 替代文字

user-interface

9
推荐指数
1
解决办法
853
查看次数

将自定义类型的QVariant转换为QString

我有一个名为Money的自定义类,我已使用Q_DECLARE_METATYPE()声明.

class Money {
public:
  Money(double d) {
    _value = d;
  }
  ~Money() {}
  QString toString() const {
    return QString(_value);
  }
private:
  double _value;
};
Q_DECLARE_METATYPE(Money);

Money m(23.32);
Run Code Online (Sandbox Code Playgroud)

我将它存储在QVariant中,我想将其转换为QString:

QVariant v = QVariant::fromValue(m);

QString s = v.toString();
Run Code Online (Sandbox Code Playgroud)

变量s最终成为空字符串,因为QVariant不知道如何将我的自定义类型转换为字符串.有没有办法做到这一点?

qt4 qvariant

8
推荐指数
1
解决办法
2万
查看次数

读取串行数据,无需高CPU使用

我想在Linux下的简单C或C++程序中通过FTDI(串行)接口读取从Arduino发送的消息.Arduino发送一个两个字符的"标题",一个命令字节,后跟几个字节的数据,具体取决于命令.

我的第一次尝试是使用open()和read()简单地轮询数据,但这样做会导致大约12%的CPU使用率.这似乎不是适当的做事方式.

其次我读了libevent on实现了一个事件循环,当文件描述符上存在数据时触发事件.我的cpu使用率几乎没有,但在调用另一个事件之前我无法读取整个消息.收到整个消息时,事件不会触发,但只要文件描述符上有任何/某些数据可用就会触发.更多地看着它显然不会像我想要的那样工作.这是我的事件代码:http://pastebin.com/b9W0jHjb

第三,我用libevent实现了一个缓冲事件.它似乎工作得更好但仍然分开了一些消息.我的活动代码是:http://pastebin.com/PQNriUCN

第四,我抛弃了libevent并尝试了Boost的ASIO课程.我关注的例子是http://www.webalice.it/fede.tft/serial_port/serial_port.html.它似乎工作正常,但"事件循环"是"while(1){}",导致CPU使用率再次上升.循环只检查错误状态,而串行读取发生在另一个线程的回调中.我在while循环中添加了一个usleep(1),它将我的CPU使用率提高到了2%即可,但对于这样的轻量级程序来说仍然很重要.

libevent甚至底层epoll的大多数例子都使用TCP套接字,它似乎与串行端口数据的行为完全不同.

所以我的主要问题是:什么是一个很好的轻量级方法从串口读取消息而不需要大量轮询?(在linux中,使用C或C++)

linux serial-port

6
推荐指数
1
解决办法
1万
查看次数

有没有办法在QObject中更改属性时收到通知?

首先,我使用的是Qt 4库和C++.

当某个属性(动态或其他)发生变化时,有没有办法得到通知(信号,事件,?)QObject

我不能修改QObject类,因为它是Qt4库的一部分.有关QObject 此处的更多信息.

properties qt4 qobject

5
推荐指数
2
解决办法
3508
查看次数