Я пытаюсь построить бескаркасное окно с одним текстовым ярлыком с изменяющимся текстом в зависимости от выбранного языка и границы вокруг него. Это окно всегда должно иметь минимально возможный размер. Вот простой код без каких-либо конфигураций, которые я пробовал до сих пор.Force QMainWindow для точного размера отображаемого текста
QMainWindow* clientIDDisplay = new QMainWindow(0, Qt::Window
| Qt::FramelessWindowHint
| Qt::WindowStaysOnTopHint);
QGroupBox* mainWidget = new QGroupBox(clientIDDisplay);
mainWidget->setStyleSheet(stylesheetGroupBox);
QLabel* labelClientID = new QLabel(clientIDDisplay);
labelClientID->setStyleSheet(stylesheetLabel);
labelClientID->setText("Client");
QHBoxLayout* mainLayout = new QHBoxLayout(clientIDDisplay);
mainLayout->addWidget(labelClientID);
mainWidget->setLayout(mainLayout);
clientIDDisplay->setCentralWidget(mainWidget);
clientIDDisplay->show();
Это показывает окно, но оно не так мал, как должно быть, осталось много места.
Использование setMinimumSize(0,0)
не помогает. Я думаю, что я понимаю, использовать QSizePolicy
для изменения размеров виджетов в зависимости от друг друга в одном макете, как объясняется в этом сообщении layout mechanism. Но это единый виджет в групповом ящике, не знаю, виджет виджет вызывает больший размер этого окна. Используя setFixedSize()
, я могу получить меньший размер, но я не знаю способ установить нужный размер. width()
ярлыка НЕ является шириной отображаемого текста.
Может кто-нибудь объяснить, какие конфигурации я должен установить, чтобы получить мое минималистичное окно? Я уверен, что кое-что упускаю, но я застрял.
Спасибо, отлично работает для меня! Вы также прав насчет воспитания. Но это приводит к другому вопросу. Вы не установили родителя в 'QLabel()'. Я считаю, это связано с тем, что Qt автоматически устанавливает родительский элемент с 'addWidget()'. Не работает 'setLayout()' то же самое? Я читал об этом в следующем потоке [ссылка] (http://qt-project.org/forums/viewthread/9050) – Rappit
да, он делает. Поэтому не стоит беспокоиться о том, имел ли «labelClientID» родительский набор. Это отличается от макетов. 'mainLayout = новый QHBoxLayout (clientIDDisplay);' означает mainLayout - это макет на 'clientIDDisplay'. Таким образом, 'mainWidget-> setLayout (mainLayout);' будет терпеть неудачу, с сообщением о стандартном выходе и вещах, которые не выглядят правильно. Когда я знаю, что виджет будет добавлен в макет или будет установлен макет, я не создам их с родителем. Это всего лишь один выбор среди многих. Но я стараюсь оставаться последовательным. – UmNyobe