Как установить центральный виджет, заполняющий все главное окно в Qt

У меня есть минимальный пример, как это:

mWidget = new QWidget;
vLayout = new QVBoxLayout;
mLabel = new QLabel;
mLabel->setText("Text");
mLabel->setAlignment(Qt::AlignCenter);
mLabel->setStyleSheet("QLabel { border: 2px solid red; }");
this->setCentralWidget(mWidget);
mWidget->setLayout(vLayout);
vLayout->addWidget(mLabel);

введите описание изображения здесь

Как видно из рисунка выше, кроме central widgetЕсть еще какая-то белая граница за красной границей. Я пытаюсь сделать так, чтобы центральный виджет заполнил все основное окно, чтобы за красной рамкой не было белой границы. Может быть, по-другому сказать, это сделать окно без полей (не знаю, если я ищу окно без полей). Я гуглил, как сделать окно без полей, и попытался setWindowFlags(Qt::FramelessWindowHint), но это не то, что я хочу. Я не совсем понимаю, как этого достичь сейчас? Так же как и тема How to make a borderless window что я должен посмотреть? Если это так, значит ли это, что я должен вызвать некоторые API Windows, чтобы это работало? Или я должен просто сделать это с некоторыми другими методами Qt?

Надеюсь, что кто-то может дать мне способ или дать мне несколько советов. Благодарю.

0

Решение

Почему вы используете QMainWindow? Кажется, что люди используют этот класс, не задумываясь, для чего он. Вы только когда-либо хочу использовать QMainWindow если у вас есть панели инструментов, строка состояния или подокна стыковки. Иначе это бессмысленно. То, что вы хотите, это «центральный виджет», который будет единственным виджетом, без встраивания в главное окно. Если вы разработали это в .ui файл, вам придется редактировать его вручную, чтобы изменить класс на QWidgetи удалите промежуточный и теперь избыточный centralWidget полностью.

1

Другие решения

В соответствии с вашими вопросами, геометрия фрейма QMainwindow и геометрия QLable должны быть скорректированы. Так что вы можете использовать следующий код строк.

setGeometry(0,0,320,280);
ui->label->setGeometry(0,0,320,245);
0

По вопросам рекламы [email protected]