我想调试事件处理代码,并希望将QEvent::Type枚举值转换为人类可读的字符串.QEvent有一个Q_GADGET宏,所以可能有一种方法可以解决这个问题?
在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) 我有一个基于Qt(4.8.5)的应用程序在OS X 10.9上运行.该应用程序使用QSettings类指定应用程序名称和公司.Plist文件由QSetttings在以下位置创建:
~/Library/Preferences/com.company_name.app_name.plist
该应用程序在保存/恢复首选项方面非常好.然后我退出应用程序,删除*.plist文件,再次运行应用程序并瞧 - 它恢复了它的首选项!根据什么文件?热门删除吗?
我无法在Qt doc for QSettings类中找到答案.
我在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) 我正在尝试安装MySQL(Windows 8),同时安装了workbench(gui).
我还在安装/配置过程中.我想创建一个新的数据库.所以,在工作台的欢迎屏幕上,我选择了New Server Instance- Register a new Server instance to manage.
为了做到这一点,我已经完成了以下配置步骤:
指定localhost为服务器主机,
给它我正在使用的用户名和密码.
然后它测试数据库连接,并在下一步中要求我
从下面的列表中选择要管理的服务.它还有助于查找配置文件.
但是,可能的服务列表是空的,如果我点击[下一步],它说
错误:为了管理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) 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,这段代码不起作用.这家伙怎么了?
在未命名的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) 我的问题是,我似乎无法让我的QSlider使用double值而不是integer,因为我需要让它返回QLineEdit的double值,并且当我在编辑中放入一些值时也设置它自己的值.
我正在尝试使用自定义类型发出信号.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) 我试图从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)
关于我可能做错什么的任何想法?