如何打印QLabel?

时间:2017-03-27 10:14:25

标签: c++ qt

我正试图在QT中从组合框中打印QLabel。代码如下所示:

QApplication a(argc, argv);
QWidget w;

QVBoxLayout *layout = new QVBoxLayout(&w);
QLabel *label = new QLabel("Here you will see the selected text from ComboBox", &w);
QComboBox *combo = new QComboBox(&w);
layout->addWidget(label);
layout->addWidget(combo);
Q_FOREACH(QSerialPortInfo port, QSerialPortInfo::availablePorts()) {
    combo->addItem(port.portName());

QObject::connect(combo, SIGNAL(currentIndexChanged(QString)), label, (SLOT(setText(QString))));

如何通过cout打印标签?

1 个答案:

答案 0 :(得分:1)

您的代码似乎正在使用Qt4,让我们的端口到Qt5和更新的C ++,我们呢?

#include <QtWidgets>
#include <QtSerialPort>

int main(int argc, char ** argv) {
   QApplication app(argc, argv);
   QWidget w;

   auto layout = new QVBoxLayout(&w);
   auto label = new QLabel("Here you will see the selected text from ComboBox");
   auto combo = new QComboBox;
   layout->addWidget(label);
   layout->addWidget(combo);
   for (auto port : QSerialPortInfo::availablePorts())
       combo->addItem(port.portName());

   QObject::connect(combo, &QComboBox::currentTextChanged, [label, combo](){
       label->setText(combo->currentText());
       qDebug() << combo->currentText();
   });

   w.show();
   return app.exec();
}
  • 尽量不在新代码中使用Q_FOREACH,它会probably be removed in the future

  • 当新操作符已经指定了类型时使用auto,这简化了代码,

  • 使用qDebug将调试信息输出到终端

  • 当调用的代码很短时,在连接中使用lambda,

  • 使用new style connections进行连接,因为它们可以保证您的代码实际运行,旧样式具有运行时检查,以及新的构建时间检查。