Подогнать окно QDialog под размер текста

Это сообщение об ошибке запускается, когда отправляется сообщение перед отправкой заголовков HTTP (с помощью setcookie или header ). Общие причины вывода чего-либо перед заголовками HTTP:

  • Случайные пробелы, часто в начале или в конце файлов, например:
     
    

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Чтобы избежать этого, просто оставьте закрытие ?> - это не обязательно. g2] в начале файла php. Изучите ваши php-файлы с помощью шестнадцатеричного редактора, чтобы узнать, так ли это. Они должны начинаться с байтов 3F 3C. Вы можете безопасно удалить спецификацию EF BB BF с начала файлов.

  • Явный вывод, например вызовы echo, printf, readfile, passthru, код до и т. д.
  • Предупреждение, выданное php, если установлено свойство display_errors php.ini. Вместо того, чтобы сбой при ошибке программиста, php молча фиксирует ошибку и выдает предупреждение. Хотя вы можете изменить конфигурации display_errors или error_reporting , вы должны скорее исправить эту проблему. Основными причинами являются доступ к неопределенным элементам массива (например, $_POST['input'] без использования empty или isset , чтобы проверить, установлен ли вход) или используя неопределенная константа вместо строкового литерала (как в $_POST[input], обратите внимание на недостающие кавычки).
  • Включение буферизации вывода должно устранить проблему; все выходные данные после вызова ob_start буферизуются в памяти до тех пор, пока вы не отпустите буфер, например. с ob_end_flush .

    Однако, хотя буферизация вывода исключает проблемы, вы должны действительно определить, почему ваше приложение выводит тело HTTP перед заголовком HTTP. Это будет похоже на телефонный звонок и обсуждение вашего дня и погоды, прежде чем сообщить вызывающему, что у него неправильный номер.

    0
    задан Ankur Shah 16 January 2019 в 20:35
    поделиться

    1 ответ

    Один из способов - использовать Font Metrics, чтобы получить ограничивающие фрагменты для каждой метки, а затем установить размер окна на сумму обоих разделов + некоторый отступ, чтобы он выглядел хорошо.

    Одной из проблем, с которыми вы столкнетесь, является перенос слов. Как вы определяете ширину окна, если вы переносите слова? Поэтому я добавил «MAXWIDTH» для окна. Если ваш текст короче и не требует переноса слов - окно будет уменьшено, чтобы соответствовать ему. Если для этого требуется перенос слов, он не будет превышать установленный вами размер.

    ConfirmDialog::ConfirmDialog(const QString& message, QWidget* parent)
    : QDialog(parent)
    {
        const int MAXWIDTH = 400;
        const int VERTICALPADDING = 50;
    
        // Create Layout
        QLabel *statusLabel = new QLabel(this);
        QLabel *statusDetailsLabel = new QLabel(this);
        QVBoxLayout *layout = new QVBoxLayout();
        layout->addWidget(statusLabel);
        layout->addWidget(statusDetailsLabel);
        setLayout(layout);
    
        // Populate Text
        statusLabel->setText(tr("Confirmation"));
        statusDetailsLabel->setText(message);
        statusDetailsLabel->setWordWrap(false); // Start w/ word wrap off.
    
        // Font metrics to get the sizes of our text.
        QFontMetrics fontMetricsLabel(statusLabel->font());
        QFontMetrics fontMetricsDetail(statusDetailsLabel->font());
    
        // Get max width - label or detail lable, whichever is longer.
        int width = std::max(fontMetricsLabel.boundingRect("Confirmation").width(),
                             fontMetricsDetail.boundingRect(message).width());
    
        // Check that we do not go over our MAXWIDTH.
        if(width > MAXWIDTH) width = MAXWIDTH;
    
        // Enable word wrapping.
        statusDetailsLabel->setWordWrap(true);
    
        // Get the heigts of both boxes.
        int height = std::max(fontMetricsLabel.boundingRect("Confirmation").height(),
                             fontMetricsDetail.boundingRect(message).height());
    
        // Set window size.
        this->setFixedSize(width, height + VERTICALPADDING);
    
    }
    
    0
    ответ дан DaveK 16 January 2019 в 20:35
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: