Managing QWidget Geometry and Properties through Qt Slots
Header Definition (windowcontroller.h)
The WindowController class inherits from QWidget and declares explicit slot functions for handlign window properties, avoiding the default on_objectName_signal naming convention.
#ifndef WINDOWCONTROLLER_H
#define WINDOWCONTROLLER_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class WindowControllerUI; }
QT_END_NAMESPACE
class WindowController : public QWidget {
Q_OBJECT
public:
WindowController(QWidget *parent = nullptr);
~WindowController();
private slots:
void retrieveGeometry();
void applyDimensions();
void lockDimensions();
void defineMinBounds();
void defineMaxBounds();
void repositionView();
void updateTitleBar();
void assignIconAsset();
private:
Ui::WindowControllerUI *ui;
};
#endif
Implementation (windowcontroller.cpp)
In the constructor, explicit connect calls bind the UI buttons to the corresponding slot functions.
#include "windowcontroller.h"
#include "ui_windowcontroller.h"
#include <QDebug>
WindowController::WindowController(QWidget *parent)
: QWidget(parent), ui(new Ui::WindowControllerUI) {
ui->setupUi(this);
connect(ui->fetchGeometryBtn, &QPushButton::clicked, this, &WindowController::retrieveGeometry);
connect(ui->applyDimensionsBtn, &QPushButton::clicked, this, &WindowController::applyDimensions);
connect(ui->lockDimensionsBtn, &QPushButton::clicked, this, &WindowController::lockDimensions);
connect(ui->defineMinBoundsBtn, &QPushButton::clicked, this, &WindowController::defineMinBounds);
connect(ui->defineMaxBoundsBtn, &QPushButton::clicked, this, &WindowController::defineMaxBounds);
connect(ui->repositionViewBtn, &QPushButton::clicked, this, &WindowController::repositionView);
connect(ui->updateTitleBtn, &QPushButton::clicked, this, &WindowController::updateTitleBar);
connect(ui->assignIconBtn, &QPushButton::clicked, this, &WindowController::assignIconAsset);
}
WindowController::~WindowController() {
delete ui;
}
void WindowController::retrieveGeometry() {
qDebug() << "=== Geometry Info ===";
QRect bounds = this->geometry();
qDebug() << "Top-Left:" << bounds.topLeft();
qDebug() << "Bottom-Right:" << bounds.bottomRight();
qDebug() << "Width:" << bounds.width();
qDebug() << "Height:" << bounds.height();
}
void WindowController::applyDimensions() {
this->resize(450, 450);
}
void WindowController::lockDimensions() {
this->setFixedSize(550, 550);
}
void WindowController::defineMinBounds() {
this->setMinimumSize(250, 250);
}
void WindowController::defineMaxBounds() {
this->setMaximumSize(800, 800);
}
void WindowController::repositionView() {
this->move(200, 150);
}
void WindowController::updateTitleBar() {
this->setWindowTitle("Qt Window Property Controller");
}
void WindowController::assignIconAsset() {
this->setWindowIcon(QIcon(":/resources/app_icon.png"));
}
Application Entry Point (main.cpp)
#include "windowcontroller.h"
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
WindowController controller;
controller.show();
return app.exec();
}
Execution Behavior
Triggering retrieveGeometry outputs the current bounding box coordinates and dimensions of the window to the debug console.
Invoking applyDimensions modifies the window dimnesions to 450x450 pixels.
Calling lockDimensions restricts the widget to a fixed 550x550 pixel area, preventing any user-driven resizing via dragging the window edges.
The defineMinBounds and defineMaxBounds slots establish the lower and upper thresholds for the window's adjustable area (250x250 and 800x800 respectively), allowing flexible resizing within these constraints.
Activating repositionView shifts the widget's top-left corner to screen coordinates (200, 150).
The updateTitleBar slot alters the text displayed in the window's title bar, while assignIconAsset applies a custom graphic loaded from the Qt resource system to the window icon.