为什么isVisible在QWidget子项中不起作用

时间:2018-10-11 10:41:30

标签: c++ qt

我尝试创建一个这样的自定义小部件:

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相同的子按钮)可见。哪里有区别?

1 个答案:

答案 0 :(得分:0)

父窗口小部件可能不可见。事件的顺序很重要,如果父对象在Device的构造函数之后可见,则isVisible将在显示后从其他函数调用时按预期工作。否则,如果父窗口小部件被隐藏,则其所有子窗口小部件也将被隐藏(即使您明确声明子窗口小部件的状态也是如此)。您何时在父窗口小部件上调用show()?没有Minimal, Complete, and Verifiable Example 我们只能推测。