Qt将小部件放在自定义位置

时间:2017-08-29 10:50:10

标签: qt

我需要将我的自定义小部件(programmaticaly)放在MainWindow中的指定位置。

在屏幕截图中,我在要放置小部件的地方标记了红色矩形“小部件”。我希望在QmenuBar和QToolBar之上放置小部件。

我已经尝试过setCentralWidget,但它会在整个窗口中展开小部件。

图像展示我的问题

我的小部件代码:

timers.cpp

#include "QtWidgets"
#include "timers.h"

static QLabel *createDragLabel(const QString &text, QWidget *parent)
{
    QLabel *label = new QLabel(text, parent);
    label->setAutoFillBackground(true);
    label->setFrameShape(QFrame::Panel);
    label->setFrameShadow(QFrame::Raised);
    return label;
}

Timers::Timers(QWidget *parent) : QWidget(parent)
{
    QLabel *wordLabel = createDragLabel("dupppa", this);
}

mainwindow.cpp

MainWindow::MainWindow()
{

    initMenu();
    initButtons();

    TrackWindow *trackWindow = new TrackWindow();
    setCentralWidget(trackWindow);

    Timers *firstTimer = new Timers();
    //setCentralWidget(firstTimer); // suck

}

1 个答案:

答案 0 :(得分:0)

好的,这是一个解决方案:让MainWidget成为小部件的父级,但不要将其添加到父级布局中。然后基本上使用QWidget::move()移动您的小部件,并使用QWidget::resize()设置其大小。通过这种方式,您可以获得具有绝对位置的小部件。

工作代码摘录:

#include <QLayout>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow{ parent },
    ui{ new Ui::MainWindow }
{
    ui->setupUi(this);

    menuBar  = new QMenuBar  { this };
    toolBar  = new QToolBar  { this };
    textEdit = new QTextEdit { this };

    menuBar->addMenu("File");
    menuBar->addMenu("Edit");
    menuBar->addMenu("About");

    toolBar->addAction("Copy");
    toolBar->addAction("Cut");
    toolBar->addAction("Insert");
    toolBar->addAction("Other tools");

    layout()->setMenuBar(menuBar);
    addToolBar(toolBar);

    textEdit->setText("Your widget");
    textEdit->resize(90, 30);
    textEdit->move(250, 10);
}

截图: enter image description here