Я создал приложение, работающее в QMainWindow, используя qtcreator, поэтому типичный способ.
Я добавил два «вручную» (то есть: не с редактором форм) созданных qlabels в строку состояния:
в шапке:
QLabel *label_timestamp;
QLabel *contentLabel_timestamp;
в конструкторе:
MainWin::MainWin(const CmdLineOptions &opts, QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWin),
m_connectionStatusLabel(new QLabel),
m_client(new QMqttClient),
m_mqttmanager(new MQTTManager(m_client)),
m_mqttServerName("localhost")
{
ui->setupUi(this);
label_timestamp = new QLabel(this);
contentLabel_timestamp = new QLabel(this);
label_timestamp->setText("system time");
contentLabel_timestamp->setText("dd.mm.yyyy, hh:mm:ss:zzz"); /* just testing output */
statusBar()->addPermanentWidget(label_timestamp);
statusBar()->addPermanentWidget(contentLabel_timestamp);
}
Если я сделаю
Label *label = findChild<QLabel *>(QString("contentLabel_")+objName);
в других местах реализации этого класса, где objName является меткой времени, конечно, findChild () возвращает 0. Он отлично работает с другими QLabels, созданными с использованием QtCreator в редакторе форм, findChild () находит их все. Разве виджет строки состояния и его содержимое не являются потомками пользовательского интерфейса? Кто-нибудь в конце концов знает выход оттуда?
Я хочу использовать findChild для общего заполнения моих меток в соответствии со схемой именования контентом, который я получаю через MQTT, это фон. Было бы замечательно, если бы контент строки состояния нуждался в особой обработке, но также мог бы обрабатываться и в этом динамическом подходе.
Большое спасибо