我尝试创建一个这样的自定义小部件:
device.h
class Device : public QWidget
{
Q_OBJECT
public:
explicit Device(QWidget *parent = 0);
};
device.cpp
Device::Device(QWidget *parent) :
QWidget(parent)
{
setGeometry(QRect(0, 0, 100, 100));
setStyleSheet(QString::fromUtf8("background: black;"));
raise();
setVisible(true);
qDebug() << "is visible: " << isVisible();
}
构造函数尝试创建具有黑色背景的正方形小部件。但是我在MainWindow上什么也看不到,输出如下:
is visible: false
似乎我正确创建了设备对象(ui->centralWidget
是父对象):
// MainWindow constructor
// device and button pointers defined in mainwindow.h
device = new Device(ui->centralWidget);
button = new QPushButton("Push me!", ui->centralWidget);
我想我可以看到带有按钮的黑色正方形,或者只有黑色正方形与按钮重叠。但是我只能看到没有正方形的按钮。
对于我来说,这还不是很清楚,因为我打电话给setVisible(true)
并在下一行将isVisible()
设置为false。但是按钮(与QWidget相同的子按钮)可见。哪里有区别?
答案 0 :(得分:0)
父窗口小部件可能不可见。事件的顺序很重要,如果父对象在Device的构造函数之后可见,则isVisible
将在显示后从其他函数调用时按预期工作。否则,如果父窗口小部件被隐藏,则其所有子窗口小部件也将被隐藏(即使您明确声明子窗口小部件的状态也是如此)。您何时在父窗口小部件上调用show()
?没有Minimal, Complete, and Verifiable Example
我们只能推测。