Как записать вывод в строку состояния рядом с определенной меткой в ​​Qt - PullRequest
0 голосов
/ 26 июня 2019

Я создаю приложение, похожее на блокнот, в Qt Creator, и я хочу, чтобы текстовая статистика записывалась в statusBar (например, слово, количество символов).В форме "слов: 14 символов: 80"

В настоящее время я могу отображать количество слов как int с помощью:

ui->statusBar->showMessage(QString::number(counter));

, но когдаЯ хотел добавить метку "words:" перед счетчиком с помощью:

ui->statusBar->addPermanentWidget(ui->label1, 1);

он игнорирует счетчик, а метка показывает "над", скрывая счетчик.

Цельиметь 4 вида счетчиков в строке состояния.В настоящее время я ищу виджет, который позволил бы мне напечатать статическую строку, например "words:", и счетчик рядом с ней.

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

У вас здесь есть некоторые концептуальные проблемы.

Если вы установите QWidget постоянным виджетом в QStatusBar, он обычно будет отображаться в правой части строки состояния. Временное сообщение (наподобие того, которое вы хотите отобразить с помощью showMessage ()) никогда не будет отображаться над ним. Обычно это не проблема, поскольку постоянные виджеты отображаются в правой части, а временные сообщения - в левой.

Вот кикер, вы добавили коэффициент растяжения в свой виджет постоянной метки:

ui->statusBar->addPermanentWidget(ui->label1, 1);

Я имею в виду " 1 ", который вы использовали в качестве второго параметра. Потерять его. Тебе это не нужно. Но вы все равно не будете удовлетворены результатом, так как он будет выглядеть так:

Screenshot1

То, что вы хотите, это что-то вроде этого, я предполагаю:

enter image description here

Для этого есть несколько вариантов:

  1. Счетчик является собственным виджетом и постоянно добавляется в строку состояния, например, после метки «Words:».
  2. Вы отображаете счетчик как часть надписи слов, используя, например, QString :: arg ().
  3. Вы создаете подкласс QLabel, который отображает статический текст, за которым следует счетчик, с хорошим методом установки для изменения количества слов. Это в основном вариант № 2, но немного более роскошный.

Возможно, есть и другие вещи, которые вы могли бы сделать, но они должны привести вас на правильный путь.

Примеры кода

1

В слоте , который вызывается при каждом изменении счетчика, вы делаете это:

// Assuming that 'wordCount' contains the current word count:
ui->label1->setText( QString( "Words: %1" ).arg( wordCount );

2

// In your setup code:
QLabel* wordsLabel = new QLabel( QString( "Words:" ) );
m_wordCountLabel = new QLabel( QString::number( 0 ) ); // initial

statusBar()->addPermanentWidget( wordsLabel );
statusBar()->addPermanentWidget( m_wordCountLabel );

// Inside your update word count slot:
m_wordCountLabel->setText( QString::number( wordCount ) );

3

// In your setup code
m_wordCountIndicator = new MyWordCountIndicator;
statusBar()->addPermanentWidget( m_wordCountIndicator );

// Inside your update word count slot:
m_wordCountIndicator->setWordCount( wordCount );

При таком подходе вы могли бы на самом деле предоставить вашему WordCountIndicator , который в основном подклассы QLabel , слот для изменения текста. Теперь вы можете напрямую подключить его к сигналу, который излучается при каждом изменении количества слов (если у вас есть такая вещь). Как указывалось ранее, существует несколько подходов, каждый со своими плюсами и минусами.

P.S .: Я заметил, что вы "злоупотребляете" файлом пользовательского интерфейса, чтобы создать свою метку для отображения в QStatusBar. Это несколько плохая практика. Это по-прежнему работает, как только вы установите виджет как постоянный виджет в строке состояния, он будет переопределен для экземпляра QStatusBar. В вашем случае я бы скромно предложил создать метки вашего индикатора прямо в вашем коде.

0 голосов
/ 27 июня 2019

Я не использовал поддержку виджетов на панели QStatus, но нужно ли вам делать больше, чем просто форматировать строку, которую вы пытаетесь отобразить?

ui->statusBar->showMessage ("words: %1 characters: %2").arg (counter).arg (char_counter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...