Qt
लेआउट, विजेट पेरेंटिंग का उपयोग करने के बारे में
खोज…
परिचय
हर Qt एप्लिकेशन में लेआउट एक आवश्यक हैं। वे वस्तु, उनकी स्थिति, उनके आकार का प्रबंधन करते हैं कि वे किस तरह से आकार बदलते हैं।
टिप्पणियों
जब आप एक लेआउट का उपयोग करते हैं, तो आपको बच्चे के विजेट का निर्माण करते समय माता-पिता को पास करने की आवश्यकता नहीं होती है। लेआउट स्वचालित रूप से विजेट्स (QWidget :: setParent () का उपयोग करके) को पुन: उत्पन्न करेगा ताकि वे उस विजेट के बच्चे हों जिस पर लेआउट स्थापित है।
ऐसा :
QGroupBox *box = new QGroupBox("Information:", widget);
layout->addWidget(box);
या करो:
QGroupBox *box = new QGroupBox("Information:", nullptr);
layout->addWidget(box);
बिल्कुल वैसा ही।
बुनियादी क्षैतिज लेआउट
क्षैतिज लेआउट क्षैतिज रूप से उसके अंदर की वस्तु को स्थापित करता है।
मूल कोड:
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QHBoxLayout *layout = new QHBoxLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
layout->addWidget(new QPushButton("hello world", widget));
layout->addWidget(new QPushButton("I would like to have a layout !", widget));
layout->addWidget(new QPushButton("layouts are so great !", widget));
window.show();
return a.exec();
}
यह उत्पादन होगा:
बेसिक वर्टिकल लेआउट
ऊर्ध्वाधर लेआउट ने इसके अंदर की वस्तु को लंबवत रूप से सेट किया।
#include "mainwindow.h"
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QVBoxLayout *layout = new QVBoxLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
layout->addWidget(new QPushButton("hello world", widget));
layout->addWidget(new QPushButton("I would like to have a layout !", widget));
layout->addWidget(new QPushButton("layouts are so great !", widget));
window.show();
return a.exec();
}
उत्पादन:
लेआउट का मेल
आप अपने मुख्य लेआउट में अन्य QWidgets के लिए मुल लेआउट लेआउट को जोड़ सकते हैं ताकि सूचना क्षेत्र की तरह अधिक विशिष्ट प्रभाव कर सकें: उदाहरण के लिए:
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QGroupBox>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QVBoxLayout *layout = new QVBoxLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
QGroupBox *box = new QGroupBox("Information:", widget);
QVBoxLayout *boxLayout = new QVBoxLayout(box);
layout->addWidget(box);
QWidget* nameWidget = new QWidget(box);
QWidget* ageWidget = new QWidget(box);
QWidget* addressWidget = new QWidget(box);
boxLayout->addWidget(nameWidget);
boxLayout->addWidget(ageWidget);
boxLayout->addWidget(addressWidget);
QHBoxLayout *nameLayout = new QHBoxLayout(nameWidget);
nameLayout->addWidget(new QLabel("Name:"));
nameLayout->addWidget(new QLineEdit(nameWidget));
QHBoxLayout *ageLayout = new QHBoxLayout(ageWidget);
ageLayout->addWidget(new QLabel("Age:"));
ageLayout->addWidget(new QLineEdit(ageWidget));
QHBoxLayout *addressLayout = new QHBoxLayout(addressWidget);
addressLayout->addWidget(new QLabel("Address:"));
addressLayout->addWidget(new QLineEdit(addressWidget));
QWidget* validateWidget = new QWidget(widget);
QHBoxLayout *validateLayout = new QHBoxLayout(validateWidget);
validateLayout->addWidget(new QPushButton("Validate", validateWidget));
validateLayout->addWidget(new QPushButton("Reset", validateWidget));
validateLayout->addWidget(new QPushButton("Cancel", validateWidget));
layout->addWidget(validateWidget);
window.show();
return a.exec();
}
उत्पादन होगा:
ग्रिड लेआउट उदाहरण
ग्रिड लेआउट एक शक्तिशाली लेआउट है जिसके साथ आप एक बार क्षैतिज और ऊर्ध्वाधर लेआउट कर सकते हैं।
उदाहरण:
#include "mainwindow.h"
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QGroupBox>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QGridLayout *layout = new QGridLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
QGroupBox *box = new QGroupBox("Information:", widget);
layout->addWidget(box, 0, 0);
QVBoxLayout *boxLayout = new QVBoxLayout(box);
QWidget* nameWidget = new QWidget(box);
QWidget* ageWidget = new QWidget(box);
QWidget* addressWidget = new QWidget(box);
boxLayout->addWidget(nameWidget);
boxLayout->addWidget(ageWidget);
boxLayout->addWidget(addressWidget);
QHBoxLayout *nameLayout = new QHBoxLayout(nameWidget);
nameLayout->addWidget(new QLabel("Name:"));
nameLayout->addWidget(new QLineEdit(nameWidget));
QHBoxLayout *ageLayout = new QHBoxLayout(ageWidget);
ageLayout->addWidget(new QLabel("Age:"));
ageLayout->addWidget(new QLineEdit(ageWidget));
QHBoxLayout *addressLayout = new QHBoxLayout(addressWidget);
addressLayout->addWidget(new QLabel("Address:"));
addressLayout->addWidget(new QLineEdit(addressWidget));
layout->addWidget(new QPushButton("Validate", widget), 1, 0);
layout->addWidget(new QPushButton("Reset", widget), 1, 1);
layout->addWidget(new QPushButton("Cancel", widget), 1, 2);
window.show();
return a.exec();
}
दे:
इसलिए आप देख सकते हैं कि समूह बॉक्स केवल पहली कॉलम और पहली पंक्ति में है क्योंकि एडवागेट layout->addWidget(box, 0, 0);
हालाँकि, यदि आप इसे layout->addWidget(box, 0, 0, 1, 3);
बदलते layout->addWidget(box, 0, 0, 1, 3);
, नया 0 और 3 यह दर्शाता है कि आप अपने विजेट के लिए कितनी लाइन और कॉलम चाहते हैं ताकि यह दिया जा सके:
ठीक उसी तरह जैसे आपने एक सबविजेट में एक क्षैतिज और फिर एक ऊर्ध्वाधर लेआउट बनाया।