• 4635阅读
  • 0回复

高手帮忙看下QTextEdit插入超链接的问题,帮忙解决一下! [复制链接]

上一主题 下一主题
离线lugaideath
 

只看楼主 正序阅读 楼主  发表于: 2009-03-13
我在QTextEdit里插入一个超链接后,然后在超链接后面继续输入,但输入的内容也算是超连接,谁可以帮我解决一下这个问题,下面是代码!
运行以后,按一下insertButton,然后再按一下saveButton保存文件,然后再按loadButton,重新加载页面,不然插入的超链接看不到是超链接的,谁也可以帮忙解决一下这个显示问题呢?

#ifndef MYLINK_H
#define MYLINK_H

#include <QtGui>

class myLink : public QWidget
{
    Q_OBJECT

public:
    myLink(QWidget *parent = 0);

private slots:
    void insetLink();
    void loadFile();
    void svaeFile();

private:
   QTextEdit *textBrowser;
   QGridLayout *gridLayout;
    QPushButton *saveButton;
    QPushButton *loadButton;
    QPushButton *insertButton;

    QString fileName;
};
#endif

#include "myLink.h"

myLink::myLink(QWidget *parent):QWidget(parent)
{
    gridLayout = new QGridLayout(this);

    saveButton = new QPushButton(this);
    saveButton->setText(tr("svae html"));
    gridLayout->addWidget(saveButton,0,0,1,1);

    loadButton = new QPushButton(this);
    loadButton->setText(tr("load html"));
    gridLayout->addWidget(loadButton,0,1,1,1);

    insertButton = new QPushButton(this);
    insertButton->setText(tr("insert link"));
    gridLayout->addWidget(insertButton,0,2,1,1);

   textBrowser = new QTextEdit(this);
   textBrowser->setReadOnly(false);
    textBrowser->setFocus();
    gridLayout->addWidget(textBrowser,1,0,1,3);
    fileName = QDir::QDir("aaa.html").absolutePath();
    loadFile();

   connect(saveButton, SIGNAL(clicked()), this, SLOT(svaeFile()));
   connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFile()));
   connect(insertButton, SIGNAL(clicked()), this, SLOT(insetLink()));
}

void myLink::insetLink()
{
    QTextCharFormat tcf;
    tcf = textBrowser->currentCharFormat();
    tcf.setAnchor(true);
    tcf.setAnchorHref("http://www.baidu.com");
    if(!textBrowser->textCursor().hasSelection())
        textBrowser->textCursor().insertText(trUtf8("百度"),tcf);
    else
        textBrowser->setCurrentCharFormat(tcf);
}

void myLink::loadFile()
{
    if (!QFile::exists(fileName))
        return;
    QFile file(fileName);
    if (!file.open(QFile::ReadOnly))
        return;

    QByteArray data = file.readAll();
    QTextCodec *codec = Qt::codecForHtml(data);
    QString str = codec->toUnicode(data);
    if (Qt::mightBeRichText(str)) {
        textBrowser->setHtml(str);
    } else {
        str = QString::fromLocal8Bit(data);
        textBrowser->setPlainText(str);
    }
}

void myLink::svaeFile()
{
    if (fileName.isEmpty())
        return;

    QFile file(fileName);
    if (!file.open(QFile::WriteOnly))
        return;
    QTextStream ts(&file);
    ts.setCodec(QTextCodec::codecForName("UTF-8"));
    ts << textBrowser->document()->toHtml("UTF-8");
    textBrowser->document()->setModified(false);
}

#include <QtGui>
#include "myLink.h"

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QTranslator translator;
    translator.load("qt_zh_CN.qm");
    app.installTranslator(&translator );

    myLink mainWin;
    mainWin.show();
    return app.exec();
};
快速回复
限100 字节
 
上一个 下一个