#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
// w.show();
//新建一个窗口 没有父对象
QWidget *widgetParent = new QWidget();
//QWidget *wiidgetParent = new QWidget(0,Qt::FramelessWindowHint);
//QWidget构造函数:QWidget::QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0)
widgetParent->setWindowTitle(QObject::tr("我是widget窗口"));
// labelChild指定了父窗口为widget,所以不是窗口
QLabel *labelChild = new QLabel(widgetParent);
labelChild->setText(QObject::tr("labelChild:我不是独立窗口,\n只是widget的子部件"));
// 新建QLabel对象,没有父对象
QLabel *labelParent = new QLabel();
labelParent->setWindowTitle(QObject::tr("我是labelParent窗口"));
//设置窗口的大小
labelParent->resize(300,300);
// 设置要显示的信息
labelParent->setText(QObject::tr("labelParent:我是个窗口"));
// 在屏幕上显示出来
labelParent->show();
widgetParent->resize(300,300);
widgetParent->show();
int ret = a.exec();
delete widgetParent;//会自动删除labelChild;
delete labelParent;
return ret;
}
ウィジェット(ウィジェット)には、QMainWindow、QWidget、QDialog、ボタン、テーブル、ラジオボタン、その他のウィジェットが含まれます。
通常、他のウィジェットに埋め込まれていないウィジェットをウィンドウと呼びます
。Windowsには通常、タイトルバーと境界線があります。
ウィンドウは親コンポーネントのないコンポーネントであるため、トップレベルコンポーネントと呼ばれ、その反対は非ウィンドウコンポーネントであり、子コンポーネントとも呼ばれます。
一般的に使用される標識の例
Qt :: FramelessWindowHintは、フレームのないウィンドウを生成するために使用されます。
Qt :: WindowStaysOnTopHintは、ウィンドウを他のすべてのウィンドウの上に配置するために使用されます。
Qt :: Dialogは、ダイアログウィンドウ(つまり、疑問符の付いたウィンドウ)を生成するために使用されます。
Qt :: SplashScreenは、境界線のないウィンドウを生成するために使用されます
ウィジェット:ウィジェットと略され、Qtインターフェースを構築するための主要なコンポーネントです。ウィジェットには、前述のQMainWindow、QDialog、QWidgetだけでなく、一般的に使用するボタン、ラベル、テーブル、ラジオボタンなどもすべてウィジェットです。
ウィンドウ:他のコンポーネントに埋め込まれていないコンポーネントをウィンドウと呼びます。ウィンドウには通常、タイトルバーと境界線があります。ウィンドウは親コンポーネントのないコンポーネントであるため、トップレベルコンポーネントと呼ばれます。
サブコンポーネント:非ウィンドウコンポーネントとも呼ばれ、Qtのほとんどのコンポーネントはサブコンポーネントとして使用され、ボタン、ラベル、ラジオボックスなどの他のウィンドウに埋め込まれています。
ウィンドウタイプ
QWidgetコンストラクター:QWidget :: QWidget(QWidget * parent = 0、Qt :: WindowFlags f = 0)
(1)前の親は親ウィジェットを参照し、デフォルト値は0で、親ウィンドウがないことを示します。
(2)fパラメーターはQt :: WindowFlags列挙型であり、ウィンドウタイプ(WindowType)とウィンドウフラグ(WindowFlags)に分けられます。
(3)前者はウィンドウのタイプを定義できます。たとえば、f = 0の場合、Qt :: Widgetが使用されることを意味します。これはQWidgetのデフォルトタイプです。このタイプのウィジェットに親ウィンドウがある場合は、は子ウィジェットです。それ以外の場合は、独立したウィンドウです。
(4)後者には多くの種類があります。
一般的に使用される標識の例
Qt :: FramelessWindowHintは、フレームのないウィンドウを生成するために使用されます。
Qt :: WindowStaysOnTopHintは、ウィンドウを他のすべてのウィンドウの上に配置するために使用されます。
Qt :: Dialogは、ダイアログウィンドウ(つまり、疑問符の付いたウィンドウ)を生成するために使用されます。
Qt :: SplashScreenは、境界線のないウィンドウを生成するために使用されます。
ウィンドウの幾何学的サイズウィンドウの場合、実行時にサイズと位置を設定する必要があることがよくあります。これは、ウィンドウの幾何学的レイアウトです。前の例で見たように、widgetParentのデフォルトのサイズは、それに含まれる子パーツlabe2Childのサイズです。widgetParentがサイズを設定しても、labe2Childの対象になります。
表示されたときのウィンドウ上のwidgetParentとlabe2Childの位置も不確実です。ウィンドウのサイズと位置については、境界線とタイトルバーが含まれているかどうかに応じて、さまざまな関数を使用してウィンドウを取得します。ヘルプインデックスでウィンドウウィジェットとダイアログウィジェットのキーワードを表示できます。ウィンドウの幾何学的レイアウトがドキュメントに示されています。
ここでの機能は2つのカテゴリに分けられます。1つのカテゴリにはフレームが含まれ、もう1つのカテゴリにはフレームが含まれません。
フレームが含まれています:x()、y()、frameGeometry()、pos()、move()などの関数。
フレームは含まれません:geometry()、width()、height()、rect()、size()などの関数。
次のコードを追加して取得できます。
qDebug()<<"widgetParent->x();"<<widgetParent->x();
qDebug()<<"widgetParent->y();"<<widgetParent->y();
qDebug()<<"widgetParent->pos();"<<widgetParent->pos();
qDebug()<<"widgetParent->frameGeometry();"<<widgetParent->frameGeometry();
qDebug()<<"widgetParent->geometry();"<<widgetParent->geometry();
qDebug()<<"widgetParent->width();"<<widgetParent->width();
qDebug()<<"widgetParent->height();"<<widgetParent->height();
qDebug()<<"widgetParent->size();"<<widgetParent->size();
qDebug()<<"widgetParent->rect();"<<widgetParent->rect();
//把主窗体几何位置给子窗体
child->setGeometry(this->geometry());