更正一下上文的结论:
    QTextCodec* codec =QTextCodec::codecForName("utf8");
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);
    QString fileName = QFileDialog::getOpenFileName();
    if (!fileName.isEmpty())
    {
        const char*p = fileName.toStdString().data();
        qDebug("%s", p) ;
        QString temp = tr(p);
        ui->lineEdit->setText(temp);
    }
这样写显示和打印都正常, 如果使用"GB2312"的话, qDebug还是会输出乱码, 不过使用qDebug() << p ; 的形式输出没问题.