首页 文章

另一个小部件内的小部件Qt

提问于
浏览
4

我正在尝试实现这种布局:

enter image description here

其中Widget1是一些小部件(QMainWindow的中央小部件),我想在它上面添加第二个小部件Widget2,但它应该在Widget1的左下角 .


EDIT: 我之前的描述不是很有用,所以我将尝试更详细地描述它 .

我继承QWidget类( class MyClass : public QWidget )并创建我自己的小部件,我在 void MyClass ::paintEvent(QPaintEvent *event) 在屏幕上绘制一些东西 . MyClass 然后是我的 QMainWindowcentralWidget .

现在最重要的是,我想添加更小的小部件(图像中的Widget2),在那里我将显示一些视频(这里我不知道如何只显示视频如何将这个Widget2添加到我的视图) . 这里的主要内容是Widget2是 inside (浮动)Widget1 .

EDIT2: 我发布的上一个代码是垃圾 .

1 回答

  • 5

    使用QGridLayout设置窗口小部件的位置:

    QGridLayout* layout = new QGridLayout(this);
    // 2x2 layout
    QWidget* green = new QWidget(this);
    green->setStyleSheet("background:green;");
    QWidget* yellow = new QWidget(this);
    yellow->setStyleSheet("background:yellow;");
    QWidget* red = new QWidget(this);
    red->setStyleSheet("background:red;");
    QWidget* blue = new QWidget(this);
    blue->setStyleSheet("background:blue;");
    layout->addWidget(green, 0, 0); // Top-Left
    layout->addWidget(yellow, 0, 1); // Top-Right
    layout->addWidget(red, 1, 0); // Bottom-Left
    layout->addWidget(blue, 1, 1); // Bottom-Right
    ui->centralWidget->setLayout(layout);
    

    会给你这样的东西:

    enter image description here

    因此,使用QGridLayout自定义您自己的小部件,并在其中设置小部件的位置 .

    将另一个小部件设置为黑色背景的父级:

    QGridLayout* layout = new QGridLayout(this);
    // 2x2 layout
    QWidget* green = new QWidget(this);
    green->setStyleSheet("background:green;");
    QWidget* yellow = new QWidget(this);
    yellow->setStyleSheet("background:yellow;");
    QWidget* red = new QWidget(this);
    red->setStyleSheet("background:red;");
    QWidget* blue = new QWidget(this);
    blue->setStyleSheet("background:blue;");
    layout->addWidget(green, 0, 0); // Top-Left
    layout->addWidget(yellow, 0, 1); // Top-Right
    layout->addWidget(red, 1, 0); // Bottom-Left
    layout->addWidget(blue, 1, 1); // Bottom-Right
    
    QWidget* mainWidget = new QWidget(this);
    mainWidget->setStyleSheet("background:black;");
    mainWidget->setLayout(layout);
    
    QHBoxLayout* centralLayout = new QHBoxLayout(this);
    centralLayout->addWidget(mainWidget);
    ui->centralWidget->setLayout(centralLayout);
    

    enter image description here

相关问题