У вас здесь есть некоторые концептуальные проблемы.
Если вы установите QWidget постоянным виджетом в QStatusBar, он обычно будет отображаться в правой части строки состояния. Временное сообщение (наподобие того, которое вы хотите отобразить с помощью showMessage ()) никогда не будет отображаться над ним. Обычно это не проблема, поскольку постоянные виджеты отображаются в правой части, а временные сообщения - в левой.
Вот кикер, вы добавили коэффициент растяжения в свой виджет постоянной метки:
ui->statusBar->addPermanentWidget(ui->label1, 1);
Я имею в виду " 1 ", который вы использовали в качестве второго параметра. Потерять его. Тебе это не нужно. Но вы все равно не будете удовлетворены результатом, так как он будет выглядеть так:
То, что вы хотите, это что-то вроде этого, я предполагаю:
Для этого есть несколько вариантов:
- Счетчик является собственным виджетом и постоянно добавляется в строку состояния, например, после метки «Words:».
- Вы отображаете счетчик как часть надписи слов, используя, например, QString :: arg ().
- Вы создаете подкласс 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. В вашем случае я бы скромно предложил создать метки вашего индикатора прямо в вашем коде.