溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【Qt學(xué)習(xí)筆記】2.窗體Widget && 屏幕坐標(biāo) && 布局

發(fā)布時間:2020-07-05 14:12:05 來源:網(wǎng)絡(luò) 閱讀:4804 作者:shangluyi 欄目:編程語言

一、窗體

在Qt中,把窗體(口)叫做Widget。

Widget可以是主窗體(口),也可以是依附在主窗體(口)上的各種控件,作為子窗體,這兩種窗口,分別稱作頂級窗口(top-level widget)和子窗口(sub widget)。


頂級窗口:一個標(biāo)準(zhǔn)的窗口,帶邊框、標(biāo)題欄、若干按鈕。(獨(dú)立)

子窗口:在窗口里面的窗口,例如:按鈕、文本框等控件。(不獨(dú)立,隨著父窗口移動)


注意:

1、每個子窗口都有一個父窗口

2、子窗口里面可能包含了若干子窗口,是一層一層的關(guān)系。

3、頂級窗口也有父窗口:就是桌面(Desktop Widget),桌面本身也是一個窗口



二、屏幕坐標(biāo)

描述一個窗口,有兩個性質(zhì):

1、位置:窗口左上角的坐標(biāo)x ,y

2、大?。簩挾葁idth,高度height(單位:像素)

比如說,我的顯示屏分辨率為(1600 * 900),那么左上角(top-left corner)的坐標(biāo)是(0, 0),右下角(bottom-right corner)的坐標(biāo)是(1599,899) 此外要注意,這里說的“左上角”“右下角”是窗口的有效區(qū)域。不包括上面的標(biāo)題欄。



三、子窗口的相對坐標(biāo)

一個子窗口在父窗口中的位置。


四、定義一個窗口

目標(biāo):實現(xiàn)一個窗口界面,向其中添加一個按鈕控件。


方法:

1、派生QWidget

2、創(chuàng)建QButton對象,添加到父窗口

3、設(shè)置按鈕的大小與位置


步驟:

1、寫一個主窗口:這是一個繼承自QWidget的類(可以手寫,但在VS下,直接在解決方案管理器中右鍵,添加Qt類,更為便捷)

MyWin.h:

#pragma once

#include <QWidget>
#include <QPushButton>

class MyWin : public QWidget
{
	Q_OBJECT

public:
	MyWin(QWidget *parent); //構(gòu)造函數(shù),參數(shù)表示當(dāng)前窗口的父窗口,若為NULL則表示主窗口
	~MyWin();
};

MyWin.cpp

#include "MyWin.h"

MyWin::MyWin(QWidget *parent)
	: QWidget(parent)
{
}

MyWin::~MyWin()
{
}


2、寫一個按鍵

MyWin類完善如下:

#pragma once

#include <QWidget>
#include <QPushButton>

class MyWin : public QWidget
{
	Q_OBJECT

public:
	MyWin(QWidget *parent);
	~MyWin();
private:
	QPushButton* my_button;
};

MyWin.cpp

#include "MyWin.h"

MyWin::MyWin(QWidget *parent)
	: QWidget(parent)
{
	my_button = new QPushButton(this); //這個button窗口父窗口是this指向的對象,也就是它本身
	my_button->setText("change world");
	my_button->setGeometry(100, 100, 200, 50);
}

MyWin::~MyWin()  
{
	//這里delete了一下,但實際上子窗口控件由父窗口管理,因此不必顯示delete
	if (my_button != NULL)
	{
		delete my_button;
	}
}

main.cpp

#include "Test2_3a_11_25.h"
#include <QtWidgets/QApplication>
#include "MyWin.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
	MyWin BaseWindow(NULL);
	MyWin DerivedWindow(&BaseWindow);

	BaseWindow.show();
    return a.exec();
}


添加子控件時注意:

1、創(chuàng)建子對象時,必須指定父窗口(作為構(gòu)造函數(shù)的參數(shù))

2、析構(gòu)函數(shù):子窗口控件由父窗口管理,因此不必顯示delete



五、更多的控件

QLineEdit:單行文本框

QPlainTextEdit:普通多行文本框

更新了更多的子窗口,現(xiàn)在的代碼如下:

【Qt學(xué)習(xí)筆記】2.窗體Widget && 屏幕坐標(biāo) && 布局

【Qt學(xué)習(xí)筆記】2.窗體Widget && 屏幕坐標(biāo) && 布局

【Qt學(xué)習(xí)筆記】2.窗體Widget && 屏幕坐標(biāo) && 布局

執(zhí)行:

【Qt學(xué)習(xí)筆記】2.窗體Widget && 屏幕坐標(biāo) && 布局


現(xiàn)在有幾個很不雅觀的問題:

1、布局太難

2、父窗口大小調(diào)整時,子窗口如何隨著移動?

3、子窗口如何占滿控件?

這些問題,接下來會解決。






尾巴:

我發(fā)現(xiàn)Qt內(nèi)部的成員對象的命名采用的是大駝峰法,因此在定義自己的對象時,盡量換一種命名風(fēng)格以避免跟庫中的對象發(fā)生命名沖突

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI