一、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上沒有其他特別的標記。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279821.html
微信掃一掃
支付寶掃一掃