小编Rei*_*ica的帖子

如何从QEvent获取人类可读的事件类型?

我想调试事件处理代码,并希望将QEvent::Type枚举值转换为人类可读的字符串.QEvent有一个Q_GADGET宏,所以可能有一种方法可以解决这个问题?

qt qevent qgadget

12
推荐指数
2
解决办法
6340
查看次数

有没有比metafactory更好的方法来解决CRTP中派生类的构造函数注入问题?

CRTP中,我想干净地将构造函数注入到派生类中 - 不使用宏而不将其写出来.这似乎是不可能的,所以我想出了一些解决方法.

首先,有一个底层事件类(QEvent),它应该为每个派生类都有一个唯一的整数类型标记(参见基本原理).你可以通过调用注册函数来获取它很容易创建一个CRTP包装器来隐藏它:

template <typename Derived> class EventWrapper : public QEvent {
public:
    EventWrapper() : QEvent(staticType()) {}
    static QEvent::Type staticType() {
        static QEvent::Type type = static_cast<QEvent::Type>(registerEventType());
        return type;
    }
};
class MyEvent1 : public EventWrapper<MyEvent1> {}; // easy-peasy
class MyEvent2 : public EventWrapper<MyEvent2> {};
Run Code Online (Sandbox Code Playgroud)

请注意MyEvent1::staticType() != MyEvent2::staticType():registerEventType()每次调用时都会返回唯一类型.

现在我希望事件类携带一些数据:

template <typename Derived> class StringEvent : public EventWrapper<D> {
    std::string m_str;
public:
    explicit StringEvent(const std::string & str) : m_str(str) {}
    std::string …
Run Code Online (Sandbox Code Playgroud)

c++ qt c++11

11
推荐指数
1
解决办法
601
查看次数

OS X 10.9上的QSettings - 无法找到/清除它

我有一个基于Qt(4.8.5)的应用程序在OS X 10.9上运行.该应用程序使用QSettings类指定应用程序名称和公司.Plist文件由QSetttings在以下位置创建:

~/Library/Preferences/com.company_name.app_name.plist

该应用程序在保存/恢复首选项方面非常好.然后我退出应用程序,删除*.plist文件,再次运行应用程序并瞧 - 它恢复了它的首选项!根据什么文件?热门删除吗?

我无法在Qt doc for QSettings类中找到答案.

macos settings qt application-settings qsettings

11
推荐指数
1
解决办法
1728
查看次数

如何创建数组的随机排列?

我在C中编写了这个函数,我想让它创建一个随机排列或从1到n的数字列表.我无法让它没有重复的数字.所以,如果你有n = 4,我希望它只返回一个包含1-4的随机数组,例如:{1,3,4,2}

int* random(int n) 
{
    int* r = malloc(n * sizeof(int));
    // initial range of numbers
    for(int i=0;i<n;++i){
        r[i]=i+1;
    }
    // shuffle
    for (int i = 1; i <= n; ++i){
        int j = rand() % i;
        r[i] = r[j];
        r[j] = i;
  }
  return r;
}
Run Code Online (Sandbox Code Playgroud)

c

10
推荐指数
1
解决办法
8043
查看次数

启动MySQL服务器作为服务(Win 8)

我正在尝试安装MySQL(Windows 8),同时安装了workbench(gui).

我还在安装/配置过程中.我想创建一个新的数据库.所以,在工作台的欢迎屏幕上,我选择了New Server Instance- Register a new Server instance to manage.

为了做到这一点,我已经完成了以下配置步骤:

  1. 指定localhost为服务器主机,

  2. 给它我正在使用的用户名和密码.

然后它测试数据库连接,并在下一步中要求我

从下面的列表中选择要管理的服务.它还有助于查找配置文件.

但是,可能的服务列表是空的,如果我点击[下一步],它说

错误:为了管理MySQL服务,它必须作为服务安装.向导无法在目标计算机上找到任何MySQL服务,因此无法启动Server实例.

我认为我必须以某种方式启动MySQL服务,因为它可能已经在我安装整个MySQL工具集时安装.

那么:我如何在Windows 8下启动这个MySQL服务?

我试过的一些事情:

手册说尝试:

C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld"
Run Code Online (Sandbox Code Playgroud)

以便将其作为服务安装.然而,没有任何反应,我得到以下(一些冗长的[注意]被删除):

2013-04-13 23:44:22 0 [Warning] TIMESTAMP with implicit DEFAULT value is depreca
ted. Please use --explicit_defaults_for_timestamp server option (see documentati
on for more details).
2013-04-13 23:44:22 2592 [Warning] Can't create test file c:\Program Files\MySQL
\MySQL Server 5.6\data\gast.lower-test
2013-04-13 23:44:22 2592 [Warning] Can't create test …
Run Code Online (Sandbox Code Playgroud)

mysql database service mysql-workbench windows-8

10
推荐指数
3
解决办法
5万
查看次数

Qstring到LPCWSTR

LPCWSTR path;

void WinApiLibrary::StartProcess(QString name)
{
    path = name.utf16();
    CreateProcess(path, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
}
Run Code Online (Sandbox Code Playgroud)

C:\ kursovaya\smc\winapilibrary.cpp:21:错误:从'const ushort*{aka const short unsigned int*}'无效转换为'LPCWSTR {aka const wchar_t*}'[-fpermissive] path = name.utf16 ();

这段代码在Qt 4.8中工作,但现在我有Qt 5.2,这段代码不起作用.这家伙怎么了?

qt

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

如何提取未命名结构的类型以在结构本身内创建新类型?

在未命名的struct的类型上创建一个参数化的方法/函数很容易.在struct的定义之后获取类型也很容易.

struct Foo {
  template <typename T> Foo(T*) { /* we have access to T here */ }
}
template <typename T> void baz(T*) { /* we have access to T here */ }

template<typename T> struct Bar {
  /* we have access to T here */
};

void test() {
  struct {
    Foo foo { this }; // access in a constructor
    void test() { baz(this); } // access in a function
  } unnamed;
  Bar<decltype(unnamed)> bar; // …
Run Code Online (Sandbox Code Playgroud)

c++ struct c++11

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

如何使用双值更改QSlider

我的问题是,我似乎无法让我的QSlider使用double值而不是integer,因为我需要让它返回QLineEdit的double值,并且当我在编辑中放入一些值时也设置它自己的值.

qt qslider

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

使用自定义类型发出信号不起作用

我正在尝试使用自定义类型发出信号.Type使用Q_DECLARE_METATYPE声明,并使用qRegisterMetaType注册.

当我发出信号时,我得到输出流的下一个错误:

Type "MyType" has id:  1024 ; register status:  true
QObject::connect: Cannot queue arguments of type 'MyType' (Make sure 'MyType' is registered using qRegisterMetaType().)
Run Code Online (Sandbox Code Playgroud)

只有在使用排队连接时(当对象位于不同的线程或使用显式时Qt::QueuedConnection)并且 MyType在命名空间内声明时,Bug才是可重现的.

示例代码:MyType.h

#define SHOW_BUG

#ifdef SHOW_BUG

    namespace NS
    {
        struct MyType
        {
            int val;
        };
    }
    Q_DECLARE_METATYPE( NS::MyType );

#else

    struct MyType
    {
        int val;
    };
    Q_DECLARE_METATYPE( MyType );

#endif
Run Code Online (Sandbox Code Playgroud)

MyClass.h:

#include "MyType.h"

namespace NS
{

    class MyClass
        : public QObject
    {
        Q_OBJECT
    public:
        MyClass( QObject …
Run Code Online (Sandbox Code Playgroud)

qt

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

QAudioDeviceInfo在Ubuntu上找不到默认音频设备

我试图从QAudioDeviceInfo类引用运行基本示例,但Qt没有找到默认的音频设备.

运行此代码不显示输出:

foreach (const QAudioDeviceInfo &deviceInfo,  QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
    qDebug() << "Device name: " << deviceInfo.deviceName();
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 13.10上使用Qt 5.0.2运行Qt Creator 2.7.1.Qt Multimedia是通过安装的apt-get.我的专业档案有QT += multimedia.我的头文件包括:

#include <QAudio>
#include <QAudioOutput>
#include <QAudioDeviceInfo>
Run Code Online (Sandbox Code Playgroud)

关于我可能做错什么的任何想法?

c++ ubuntu qt qt5 qtmultimedia

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