почему isVisible не работает в QWidget дочернем - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь создать собственный виджет следующим образом:

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 голосов
/ 18 октября 2018

Родительский виджет скорее всего невидим.Порядок событий имеет значение, если родитель становится видимым после конструктора устройства, то isVisible будет работать так, как задумано, когда вызывается из другой функции после его отображения.В противном случае, если родительский виджет скрыт, все его дочерние виджеты также скрыты (даже если вы явно указали иное для дочерних виджетов).Когда вы вызываете show() на родительском виджете?Без минимального, полного и проверяемого примера мы можем только строить предположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...