У меня есть минимальный пример, как это:
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?
Надеюсь, что кто-то может дать мне способ или дать мне несколько советов. Благодарю.
Почему вы используете QMainWindow
? Кажется, что люди используют этот класс, не задумываясь, для чего он. Вы только когда-либо хочу использовать QMainWindow
если у вас есть панели инструментов, строка состояния или подокна стыковки. Иначе это бессмысленно. То, что вы хотите, это «центральный виджет», который будет единственным виджетом, без встраивания в главное окно. Если вы разработали это в .ui
файл, вам придется редактировать его вручную, чтобы изменить класс на QWidget
и удалите промежуточный и теперь избыточный centralWidget
полностью.
В соответствии с вашими вопросами, геометрия фрейма QMainwindow и геометрия QLable должны быть скорректированы. Так что вы можете использовать следующий код строк.
setGeometry(0,0,320,280);
ui->label->setGeometry(0,0,320,245);