如何将长的标题用省略号收尾

      从数据库中提取长长的文章,总是有碍网页的排版布局。所以,想固定地提取一部分字符,然后后面有……替代。

1,原理:
判断文章的长度是否超过规定的长度,若超过则只显示规定长度的大学,否则完整显示。

2,涉及函数:

len():返回字符串长度或者变量的字节长度。

<script language="vbs">

cnbruce="my name is cnbruce"

len_cn=len(cnbruce)

alert(len_cn)

</script>

left():截取一个字符串的前部分
<script language="vbs">

cnbruce="my name is cnbruce"

left_cn=left(cnbruce,10)

alert(left_cn)

</script>
3,主要程序:判断内容长度是否大于给定值,据结果做相应操作

<script language="vbs">
text="123 4567 8fds90 abcde fghxcfv"
i=10
if len(text)>i then   '如果文本长度大于给定的值
  text=left(text,i)     '则提取前段的i位的字符串
alert (text&"...")
else
alert (text)
end if
</script>

4,ASP中应用
以上是在客户端脚本调试,和ASP也是大同小异:最主要的是函数功能。
<%
text=rs("content")  '将数据库字段值赋到某变量上
i=10                      '定义固定大小
if len(text)>i then   '如果文本长度大于给定的值
text=left(text,i)     '则提取前段的i位的字符串
response.write (text&"...")
else
response.write (text)
end if
%>
5,为了方便,做成函数


<%
function conleft(content,i)
if len(content)>i then  
content=left(content,i)    
response.write (content&"...")
else
response.write (content)
end if
end function
%>

以上为函数,下面就可以直接调用。


<%call conleft(rs("content"),10)%>

OK,相信以后遇到这些问题应该是NO PROBLEM 

为了解决中英文截取的问题,建议大家使用如下函数:


Function gotTopic(str,strlen)
    if str="" then
        gotTopic=""
        exit function
    end if
    dim l,t,c, i
    str=replace(replace(replace(replace(str,"&nbsp;"," "),"&quot;",chr(34)),"&gt;",">"),"&lt;","<")
    l=len(str)
    t=0
    for i=1 to l
        c=Abs(Asc(Mid(str,i,1)))
        if c>255 then
            t=t+2
        else
            t=t+1
        end if
        if t>=strlen then
            gotTopic=left(str,i) & "…"
            exit for
        else
            gotTopic=str
        end if
    next
    gotTopic=replace(replace(replace(replace(gotTopic," ","&nbsp;"),chr(34),"&quot;"),">","&gt;"),"<","&lt;")
End Function

在使用Qt框架中的`QTableView`显示中文内容时,如果列中的内容过,可能无法完整显示,此时可以通过设置`QTableView`的委托(delegate)来实现过文本的省略显示。以下是一个简单的示例代码,演示如何为`QTableView`设置一个委托,使得过的文本以省略号显示: 首先,需要引入`QStyledItemDelegate`,它是用于定制`QTableView`中单元格显示方式的一个委托类。 ```cpp #include <QStyledItemDelegate> #include <QApplication> #include <QTableView> #include <QStandardItemModel> // 自定义委托类,用于处理文本截断和省略显示 class ElideDelegate : public QStyledItemDelegate { public: ElideDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {} // 重写paint方法,实现文本的省略显示 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override { // 调用基类的paint方法处理常规绘制 QStyledItemDelegate::paint(painter, option, index); // 获取当前单元格的文本 QString text = index.model()->data(index, Qt::DisplayRole).toString(); // 检查文本是否需要截断 if (option.rect.width() < painter->boundingRect(option.rect, Qt::TextWordWrap | Qt::TextShowMnemonic, text).width()) { // 计算截断位置 int elideWidth = option.rect.width(); QString elidedText = painter->fontMetrics().elidedText(text, Qt::ElideRight, elideWidth); // 在同一位置绘制省略后的文本 painter->drawText(option.rect, Qt::TextWordWrap | Qt::TextShowMnemonic, elidedText); } } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建QTableView对象 QTableView tableView; // 创建委托对象 ElideDelegate *delegate = new ElideDelegate(&tableView); // 设置委托给QTableView tableView.setItemDelegate(delegate); // 创建模型并填充数据 QStandardItemModel model(4, 2); model.setHorizontalHeaderLabels(QStringList() << "标题1" << "标题2"); model.setItem(0, 0, new QStandardItem("这是一段很的文本内容,可能会超出显示范围...")); model.setItem(1, 0, new QStandardItem("短文本")); model.setItem(2, 0, new QStandardItem("超出显示范围的文本")); model.setItem(3, 0, new QStandardItem("其他文本")); // 将模型设置给QTableView tableView.setModel(&model); // 显示QTableView tableView.show(); return app.exec(); } ``` 在这段代码中,`ElideDelegate`类继承自`QStyledItemDelegate`,并重写了`paint`方法以实现文本的省略显示。在`paint`方法中,我们首先调用基类的`paint`方法来处理常规绘制,然后获取当前单元格的文本并检查是否需要截断。如果需要,我们计算截断位置,并使用`elidedText`方法生成省略后的文本,最后在相同的位置绘制省略后的文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值