Вот пример, который использует QFontMetrics
для получения ширины текста строки выполнения, а затем добавляет 100px к этому для самой панели выполнения. Когда будет показано диалоговое окно, оно будет изменено до этой ширины.
auto dialog = new QProgressDialog();
dialog->setWindowTitle("Progress");
dialog->setLabelText("Test progress dialog");
auto bar = new QProgressBar(dialog);
bar->setTextVisible(true);
bar->setValue(50);
bar->setFormat("Processing section %v of %m. Percentage completed: %p");
dialog->setBar(bar);
// Use QFontMetrics to get the width of the bar text,
// and then add 100px for the progress bar itself. Set
// this to the initial dialog width.
int width = QFontMetrics(bar->font()).width(bar->text()) + 100;
dialog->resize(width, dialog->height());
dialog->show();
Это позволяет избежать жесткого кодирования ширины, хотя это немного сложно. Я думаю, что просто установление разумной минимальной ширины, как показано ниже, вероятно, является лучшим/более простым решением:
dialog->setMinimumWidth(300);
Установка фиксированной ширины может решить эту проблему, но я не хочу жестко задавать ширину. – ldlchina
может быть, установите минимальную ширину, а не фиксированную ширину? – ramtheconqueror