您的位置:

centralwidget详解

一、centralwidget布局

centralwidget是Qt中的一个重要的控件,它作为QWidget控件的子类,实现了窗口的布局。在Qt中,我们可以使用一些布局来将控件排列在一个窗口中,如QHBoxLayout、QVBoxLayout、QGridLayout等。而centralwidget是窗口中的一个特殊控件,它会自动填充整个窗口。


QMainWindow* window = new QMainWindow();
QWidget* centralWidget = new QWidget(window);
window->setCentralWidget(centralWidget);

在这个示例代码中,我们新建了一个QMainWindow窗口,并在窗口中新建了一个QWidget控件,并将它设置为该窗口的centralWidget。这样做的好处在于,我们可以利用布局将其他的控件添加到这个QWidget控件中,实现窗口中的布局。

二、centralwidget添加背景图片

我们可以通过样式表设置centralwidget的背景颜色或者添加一张背景图片。加背景图片的方法相对简单,只需要在样式表中设置background-image属性即可。


QWidget {
    background-image: url(:/background/image.jpg);
    background-repeat: no-repeat;
}

这样centralwidget的背景图片就被设置成了image.jpg。需要注意的是,这里的路径“:/background/image.jpg”是Qt中引用资源的方式,我们需要在项目文件(.pro)中加入以下代码:


RESOURCES += \
    resources.qrc

然后在项目根目录中新建一个resources.qrc文件,将图片资源放入其中。

三、centralwidget在哪里

在一个Qt窗口中,centralwidget的位置通常是在窗口的正中央,占据整个窗口。但是如果窗口中有其他的控件,例如菜单栏QMenuBar或者工具栏QToolBar,它们可能会占据部分centralwidget的空间。

如果我们希望在创建窗口时就知道centralwidget的位置,可以利用QMainWindow自身的geometry()函数得到窗口的大小和位置,然后再用centralwidget的大小计算得到它的实际位置。


QMainWindow* window = new QMainWindow();
int w = window->geometry().width();
int h = window->geometry().height();
int cw = centralWidget->sizeHint().width();
int ch = centralWidget->sizeHint().height();
int x = (w-cw)/2;
int y = (h-ch)/2;
centralWidget->setGeometry(x, y, cw, ch);

这样,我们就可以将centralwidget设置在窗口的中央了。

四、centralwidget最大化

如果我们希望centralwidget占据整个窗口,即窗口最大化时,centralwidget能够自动填充整个窗口,可以通过继承QMainWindow并重载resizeEvent()函数来实现。


class MyMainWindow : public QMainWindow {
    public:
        void resizeEvent(QResizeEvent* event);
};

void MyMainWindow::resizeEvent(QResizeEvent* event) {
    QMainWindow::resizeEvent(event);
    centralWidget()->setGeometry(rect());
}

在这个示例中,我们新建了一个MyMainWindow,继承自QMainWindow,并重载了resizeEvent()函数。在这个函数中,我们调用了父类的resizeEvent()函数来让窗口正常大小,然后将centralwidget的大小设置成窗口的大小。

五、centralwidget怎么去掉

如果我们不需要centralwidget的布局功能,想要去掉它,可以使用setCentralWidget(NULL)函数将其设为NULL。


QMainWindow* window = new QMainWindow();
window->setCentralWidget(NULL);

这样做之后,centralwidget就会消失。

六、centralwidget和widget

在初使用Qt时,我们会发现QWidget和centralwidget这两个控件都可以用来布局窗口。那么它们的区别是什么呢?

QWidget是Qt中的一个基本控件,可以理解为最简单的窗口容器。而centralwidget则是QMainWindow特有的一个控件,它与其他控件的区别在于,它会自动填充整个窗口。

因此,如果我们只需要简单的布局功能,可以使用QWidget,如果需要窗口填充功能,就需要使用centralwidget。

七、centralwidget怎么设置

如果我们需要对centralwidget进行一些特殊的设置,例如添加样式表、设置字体等,可以直接使用QWidget的函数来实现,因为centralwidget本质上就是一个QWidget。


QMainWindow* window = new QMainWindow();
window->centralWidget()->setFont(QFont("微软雅黑", 12));
window->centralWidget()->setStyleSheet("QWidget {background-color: #333;}");

这样,我们可以将centralwidget的字体设置为微软雅黑12号,将背景颜色设置为#333。

八、centralwidget怎么打破布局

有时候,我们希望在centralwidget中添加一些不受布局限制的控件,可以使用QWidget的绝对布局。Qt提供了一个QLayout类,可以对控件进行布局管理。其中相对布局、网格布局和框布局都是非绝对的布局。

而QLayout的子类QBoxLayout更是对QLayout的进一步封装,它提供了简单的水平和垂直布局方式。如果我们需要使用绝对布局,可以使用QFormLayout、QGridLayout或者自行实现绝对布局。


QMainWindow* window = new QMainWindow();
QWidget* centralWidget = new QWidget(window);
QVBoxLayout* layout = new QVBoxLayout(centralWidget);
layout->addWidget(new QLabel("Hello World!"));
QLineEdit* lineEdit = new QLineEdit();
lineEdit->setGeometry(100, 100, 200, 20);
centralWidget->setLayout(layout);
window->setCentralWidget(centralWidget);

在这个示例中,我们新建了一个QVBoxLayout布局,并将一个QLabel添加到这个布局中。同时,我们还添加了一个QLineEdit控件,并手动设置了它的大小和位置,即使用了绝对布局。最后,我们将centralwidget的布局设置成QVBoxLayout,窗口的centralWidget也设置成了centralwidget。

九、central park

central park是一座位于美国纽约市曼哈顿区中心的公园,是全球最大的城市公园之一。虽然和centralwidget没有直接关系,但这里简单介绍一下。

central park是一个占地面积超过840英亩的大型绿地,其中包括森林、花园、瀑布和草坪等景观,是纽约市的一个重要地标和旅游景点。如果你有机会去纽约旅游,一定要去看看这个美丽的公园。

十、centralwidget上有个红色的标记

如果我们在Qt的设计器中拖拽控件时,可能会在centralwidget上看到一个红色的标记。这个标记代表着控件将会添加到centralwidget中。

如果我们右键点击centralwidget,选择“Lay Out”-“Horizontally”或者“Vertically”,就会在centralwidget中添加一个水平或垂直的布局,然后我们可以将其他控件拖拽到这个布局中,实现窗口中控件的布局。

除此之外,centralwidget上没有其他特别的标记。