• 8671阅读
  • 3回复

[提问]qt4下 用qdir和listwidget做资源管理器,不能列出中文目录名 [复制链接]

上一主题 下一主题
离线haoyunp
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-04
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
大家好,我用qdir和Qlistwidget做资源管理器,不能列出中文目录
如果再main函数中指定字体是中文:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
则带有中文的目录及文件名都不能列出

如果不加以上代码,则带有中文的目录及文件名是乱码

请问大家怎样解决呢?


问题解决了:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));

离线haoyunp
只看该作者 1楼 发表于: 2011-08-04
这是main代码
#include <QtGui/QApplication>
#include "dialog.h"
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
     QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    Dialog w;
    w.show();

    return a.exec();
}
离线haoyunp
只看该作者 2楼 发表于: 2011-08-04
dialog.cpp代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QAbstractItemView>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    LineEditDir=ui->lineEdit;
    ListWidgetFile=ui->listWidget;
    LineEditDir->setText("/");
    QString root="/";
    QDir rootDir(root);
    QStringList string;
    string << "*" ;
    QFileInfoList list=rootDir.entryInfoList (string);
    showFileInfoList(list);
    this->setWindowTitle(tr("资源管理器));

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::showFileInfoList(QFileInfoList list)
{
    ListWidgetFile->clear();
    itemnum=0;
    ListWidgetFile->setCurrentRow(itemnum);
    m=ListWidgetFile->currentRow();
    for(int i=0;i<list.size();i++)
    {
        QFileInfo tmpFileInfo=list.at(i);
        if(tmpFileInfo.isDir())
        {
            QIcon icon(":/images/dir.png");
            QString filename=tmpFileInfo.fileName();
            QListWidgetItem *tmp=new QListWidgetItem(icon,filename);
            ListWidgetFile->addItem(tmp);
        }
        else if(tmpFileInfo.isFile())
        {
            QIcon icon(":/images/file.png");
            QString filename=tmpFileInfo.fileName();
            QListWidgetItem *tmp=new QListWidgetItem(icon,filename);
            ListWidgetFile->addItem(tmp);
        }
    }
    ListWidgetFile->setItemSelected(ListWidgetFile->item(itemnum),true);
    ListWidgetFile->setCurrentRow(itemnum);
    m=ListWidgetFile->currentRow();
}

void Dialog::slotShow(QDir dir)
{
    QStringList string;
    string<<"*";
    QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir::DirsFirst);
    showFileInfoList(list);
}

void Dialog::on_listWidget_itemDoubleClicked(QListWidgetItem* item)
{
    QString str=item->text();
    QDir dir;
    dir.setPath(LineEditDir->text());
    dir.cd(str);
    LineEditDir->setText(dir.absolutePath());
    slotShow(dir);
}

void Dialog::on_listWidget_itemClicked(QListWidgetItem* item)
{
    itemnum=ListWidgetFile->currentRow();
}

void Dialog::on_copyButton_clicked()
{

}

void Dialog::on_pasteButton_clicked()
{

}

void Dialog::on_enterButton_clicked()
{
    QString str;
    str=ListWidgetFile->currentItem()->text();
    QDir dir;
    dir.setPath(LineEditDir->text());
    dir.cd(str);
    LineEditDir->setText(dir.absolutePath());
    slotShow(dir);
}

void Dialog::on_upButton_clicked()
{
    if(itemnum>0)
    {
        itemnum--;
        ListWidgetFile->setItemSelected(ListWidgetFile->item(itemnum),true);
        ListWidgetFile->setCurrentRow(itemnum);
        m=ListWidgetFile->currentRow();
    }
}

void Dialog::on_downButton_clicked()
{
    QDir dir;
    QStringList string;
    dir.setPath(LineEditDir->text());
    string<<"*";
    QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir::DirsFirst);
    if(itemnum<list.size()-1)
    {
        itemnum=itemnum+1;
        ListWidgetFile->setItemSelected(ListWidgetFile->item(itemnum),true);
        ListWidgetFile->setCurrentRow(itemnum);
        m=ListWidgetFile->currentRow();
    }
}
离线haoyunp
只看该作者 3楼 发表于: 2011-08-04

大家帮帮忙呀
快速回复
限100 字节
 
上一个 下一个