我可以在主窗口类的一个函数中创建和查看QWidget:
..
// ok
QWidget *w = new QWidget(this);
w->setGeometry(400,300,400,300);
w->setStyleSheet("background-color:white;");
w->show();
..
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过创建另一个派生自QWidget的类来做类似的事情时,我看不到任何东西:
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *sParent):QWidget(sParent)
{
}
};
..
// nothing visible happens.
MyWidget *w = new MyWidget(this);
w->setGeometry(400,300,400,300);
w->setStyleSheet("background-color:white;");
w->show();
..
Run Code Online (Sandbox Code Playgroud)
什么可能导致这个?
注意:关于这个问题的一切:http://pastebin.com/haCHfqnu
我用C++ / QT编写了一个应用程序,它与设备通信以读取/写入其变量,将它们放入/获取结构中,并在 gui 中呈现它们以用于查看/编辑目的。
1)该设备附带了一个示例 c 代码,该代码还定义了通信协议(以非常糟糕的方式),例如:
#define VALUE_1 0x12345678
#define VALUE_2 0xDEADBEEF
#define MY_DEVICE_VAR (VALUE_1 << 4) & (VALUE_2 >> 6)
#define MY_DEVICE_VAR_1 (MY_DEVICE_VAR & (VALUE_1 << 2)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
// .. and 300 more lines like above
Run Code Online (Sandbox Code Playgroud)
因此该变量VAR_1表示为:MY_DEVICE_VAR_1。
2)我有一个保存设备所有变量的结构:
struct MyDeviceData
{
int var1;
double var2;
char var3;
bool var4;
.
.
};
Run Code Online (Sandbox Code Playgroud)
它基本上是从设备读取的数据的存储/投影。有 4 种不同类型的 POD …
这是我的问题的代码
class Base : QThread
{
Q_OBJECT
virtual void run() = 0;
signals:
void Ping(int);
};
class Derived : public Base
{
void run()
{
emit Ping(42);
}
}
Run Code Online (Sandbox Code Playgroud)
信号(42)不会到达/呼叫插槽.怎么了?提前致谢.