您的位置:首页 > 编程语言 > Qt开发

Qt的一些整理

2017-09-21 09:33 127 查看


二、详解



1、获取屏幕的工作区的大小

[cpp] view plain copy
{
//获取屏幕分辨率
qDebug()<< "screen width:"<<QApplication::desktop()->width();
qDebug()<< "screen height:"<<QApplication::desktop()->height();
//下面方法也可以
qDebug()<< "screen width:"<<qApp->desktop()->width();
qDebug()<< "screen height:"<<qApp->desktop()->height();

//获取客户使用区大小
qDebug()<< "screen avaliabe width:"<<QApplication::desktop()->availableGeometry().width();
qDebug()<< "screen avaliabe heigth:"<<QApplication::desktop()->availableGeometry().height();

//获取应用程序矩形大小
qDebug()<< "application avaliabe width:"<<QApplication::desktop()->screenGeometry().width();
qDebug()<< "application avaliabe heigth:"<<QApplication::desktop()->screenGeometry().height();
}


移动到窗口中央:

move((QApplication::desktop()->width() - width())/2, (QApplication::desktop()->height() - height())/2);

全屏设置:

setWindowState(Qt::WindowFullScreen);


2、设置应用程序图标

[cpp] view plain copy
{
QIcon icon;
icon.addPixmap(QPixmap(QString::fromUtf8(":/images/logo.png")), QIcon::Normal, QIcon::Off);
win->setWindowIcon(icon);
win->setIconSize(QSize(256, 256));
}


3、显示图片Label

[cpp] view plain copy
{
QLabel *logoLabel;
logoLabel = new QLabel();
logoLabel->setObjectName(QString::fromUtf8("logolabel"));
logoLabel->setGeometry(QRect(160, 110, 128, 128));
logoLabel->setPixmap(QPixmap(QString::fromUtf8(":/images/logo.png")));
logoLabel->setScaledContents(true);
}



4、字体更改

[cpp] view plain copy
{
QFont font;
font.setPointSize(40);
font.setBold(true);
font.setWeight(75);
QLabel *fontLabel = new QLabel();
fontLabel->setFont(font);
}


5、文本颜色更改

[cpp] view
plain copy

void Widget::changeColor(QWidget *window, QColor color)

{

QPalette *palette = new QPalette();

palette->setColor(QPalette::Text, color);

window->setPalette(*palette);

delete palette;

}


6、时间日期转QString

[cpp] view
plain copy

QString date_str = QDate::currentDate().toString(QString("yyyyMMdd")); //"yyyyMMdd"为转换格式,该格式转换后日期如"20121205"

QString time_str = QTime::currentTime().toString(QString("hhmmss")); //"hhmmss"为转换格式,该格式转换后时间如"080359"


7、Qt界面风格

[cpp] view
plain copy

qApp>setStyle(new QPlastiqueStyle); //在window中main函数中使用这句话会让界面快速的变得好看。


8、qobject_cast用法

函数原型:

T qobject_cast (QObject * object)

该方法返回object向下的转型T,如果转型不成功则返回0,如果传入的object本身就是0则返回0。

使用场景:

当某一个Object emit一个signal的时候(即sender),系统会记录下当前是谁emit出这个signal的,所以在对应的slot里就可以通过 sender()得到当前是谁invoke了slot。有可能多个 Object的signal会连接到同一个signal(例如多个Button可能会connect到一个slot函数onClick()),因此这是就需要判断到底是哪个Object emit了这个signal,根据sender的不同来进行不同的处理.

在槽函数中:

QPushButton *button_tmp = qobject_cast<QPushButton *>(sender()); //信号的对象,向下转型为按钮类型


9、Qslider进入显示

[cpp] view
plain copy

{

slider = new QSlider;

slider->setRange(0,100);

slider->setTickInterval(10);

slider->setOrientation(Qt::Horizontal);

slider->setValue(100);

slider->setVisible(false);

connect(slider,SIGNAL(valueChanged(int)),this,SLOT(slotChanged(int)));

}

void PicTrans::enterEvent ( QEvent * )

{

slider->setVisible(true);

}

void PicTrans::leaveEvent(QEvent *)

{

slider->setVisible(false);

}

进入slider显示,离开slider隐藏。


10、Qt不重复随机数

[cpp] view
plain copy

{ //qt

QTime time; time= QTime::currentTime();

qsrand(time.msec()+time.second()*1000);

qDebug() << qrand() % 100; //在0-100中产生出随机数

}

[cpp] view
plain copy

{ //c语言

srand(unsigned(time(0)));

int number = rand() % 100; /*产生100以内的随机整数*/

}


11、QSettings保存窗口状态

[cpp] view
plain copy

void

Settings::readSettings()

{

QSettings setting("MyPro","settings");

setting.beginGroup("Dialog");

QPoint pos = setting.value("position").toPoint();

QSize size = setting.value("size").toSize();

setting.endGroup();

setting.beginGroup("Content");

QColor color = setting.value("color").value<QColor>();

QString text = setting.value("text").toString();

setting.endGroup();

move(pos);

resize(size);

QPalette p = label->palette();

p.setColor(QPalette::Normal,QPalette::WindowText,color);

label->setPalette(p);

edit->setPlainText(text);

}

void

Settings::writeSettings()

{

QSettings setting("MyPro","settings");

setting.beginGroup("Dialog");

setting.setValue("position",pos());

setting.setValue("size",size());

setting.endGroup();

setting.beginGroup("Content");

setting.setValue("color",label->palette().color(QPalette::WindowText));

setting.setValue("text",edit->toPlainText());

setting.endGroup();

}


12、两个信号连接同一个槽

参考上述的例8。

[cpp] view
plain copy

connect(ui->btn_ok, SIGNAL(clicked()), this, SLOT(slotClick()));

connect(ui->btn_cancel, SIGNAL(clicked()), this, SLOT(slotClick()));

[cpp] view
plain copy

void Dialog::slotClick()

{

QPushButton* btn = dynamic_cast<QPushButton*>(sender());

if (btn == ui->btn_ok) {

qDebug() << "button:" <<ui->btn_ok->text();

}

else if (btn == ui->btn_cancel) {

qDebug() << "button:" <<ui->btn_cancel->text();

}

}

有时button类型不同时,可以分别判断对象指针。

[cpp] view
plain copy

void Dialog::slotClick()

{

;

if ((QPushButton* btn = dynamic_cast<QPushButton*>(sender())) == ui->btn_ok) {

qDebug() << "button:" <<ui->btn_ok->text();

}

else if ((QRadioButton* btn = dynamic_cast<QRadioButton*>(sender())) == ui->btn_cancel) {

qDebug() << "button:" <<ui->btn_cancel->text();

}

}


13、对话框操作

视图模型中, 设置视图不可编辑 setEditTriggers(QAbstractItemView::NoEditTriggers);

对话框去掉右上角的问号: setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);

对话框加上最小化按钮: setWindowFlags(windowFlags()|Qt::WindowMinimizeButtonHint);


14、多语言国际化

1.pro工程文件里面添加 TRANSLATIONS+=mypro.ts

2.选择Qt Creator环境的菜单栏 工具->外部->Qt语言家->更新翻译(或lupdate mypro.pro或lupdate-qt4mypro.pro)

3.桌面开始菜单里面Qt目录打开 Linguist工具

4.Linguist工具加载生成好的mypro.ts文件

5.填好翻译, 保存, Release, 就生成好编译后的qm文件

6.在工程的源文件中, 这样加载qm文件:

QTranslator translator;

QLocale locale;

if(QLocale::Chinese == locale.language())

{//中文环境

translator.load("mypro.qm"); //中文

a.installTranslator(&translator);

}//否则默认用英文


15、item-view控件多选后删除

[cpp] view
plain copy

setSelectionMode(QAbstractItemView::MultiSelection); //不按ctrl键即可多选

setSelectionMode(QAbstractItemView::ExtendedSelection); //按ctrl键多选

QModelIndexList indexList = ui->listvFiles->selectionModel()->selectedRows();

QModelIndex index;

int i = 0;

foreach(index, indexList)

{

this->modFileLists.removeRow(index.row() - i);

++i;

}


16、QByteArray存入中文时乱码

[cpp] view
plain copy

QByteArray bytes;

bytes.append(this->modFileLists.data(this->modFileLists.index(i), Qt::DisplayRole).toString()); //乱码

QByteArray bytes;

bytes.append(this->modFileLists.data(this->modFileLists.index(i), Qt::DisplayRole).toString().toLocal8Bit()); //正常


17、Qt托盘

[cpp] view
plain copy

//使用QSystemTrayIcon类

QSystemTrayIcon *tray; //托盘

QMenu *meuTray; //托盘菜单

QAction *acTrayQuit; //托盘退出

this->tray = new QSystemTrayIcon(this);

this->meuTray = new QMenu(this);

this->acTrayQuit = this->meuTray->addAction(QIcon(":/res/image/quit.png"), tr("Quit"));

connect(this->acTrayQuit, SIGNAL(triggered()), this, SLOT(OnExit()));

this->tray->setContextMenu(this->meuTray);

this->tray->setIcon(QIcon(":/res/image/tray.ico"));

this->tray->show();

connect(this->tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(OnTrayActivated(QSystemTrayIcon::ActivationReason)));

voidUpdateTerminal::OnTrayActivated(QSystemTrayIcon::ActivationReasonreason)

{

switch(reason)

{

caseQSystemTrayIcon::DoubleClick:

if(this->isHidden())

this->show();

break;

}

}


18、Qt递归遍历文件和文件夹

[cpp] view
plain copy

//递归遍历文件夹,找到所有的文件

//_filePath:要遍历的文件夹的文件名

int FindFile(const QString& _filePath)

{

QDir dir(_filePath);

if (!dir.exists()) {

return -1;

}

//取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)

dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);

//文件夹优先

dir.setSorting(QDir::DirsFirst);

//转化成一个list

QFileInfoList list = dir.entryInfoList();

if(list.size()< 1 ) {

return -1;

}

int i=0;

//递归算法的核心部分

do{

QFileInfo fileInfo = list.at(i);

//如果是文件夹,递归

bool bisDir = fileInfo.isDir();

if(bisDir) {

FindFile(fileInfo.filePath());

}

else{

//bool isDll = fileInfo.fileName().endsWith(".dll");

qDebug() << fileInfo.filePath() << ":" <<fileInfo.fileName();

}//end else

i++;

} while(i < list.size());

}

若只想获取文件名,也可以这样使用:

[cpp] view
plain copy

int FindFile(const QString& _filePath)

{

QDir dir(_filePath);

if (!dir.exists()) {

return -1;

}

//取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)

dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);

//文件夹优先

dir.setSorting(QDir::DirsFirst);

//转化成一个list

QFileInfoList list = dir.entryInfoList();

QStringList infolist = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);

if(list.size()< 1 ) {

return -1;

}

int i=0;

//递归算法的核心部分

do{

QFileInfo fileInfo = list.at(i);

//如果是文件夹,递归

bool bisDir = fileInfo.isDir();

if(bisDir) {

FindFile(fileInfo.filePath());

}

else{

for(int m = 0; m <infolist.size(); m++) {

//这里是获取当前要处理的文件名

qDebug() << infolist.at(m);

}

break;

}//end else

i++;

} while(i < list.size());

}


19、Qt调用外部程序QProcess

(1)使用startDetached或execute

使用QProcess类静态函数QProcess::startDetached(const QString &program, constQStringList &argument)或者QProcess::execute(const QString &program, const QStringList &argument);startDetached 函数不会阻止进程, execute会阻止,即等到这个外部程序运行结束才继续执行本进程。

例如执行:Shutdown.exe -t -s 3600

[html] view
plain copy

QStringList list;

list<< "-t" << "--s" << "3600";

QProcess::startDetached("Shutdown.exe",list);

// QProcess::execute("Shutdown.exe",list);

(2)创建QProcess,使用start函数

可以查看外部程序返回的数据,输出结果。

[html] view
plain copy

QProcess *pProces = new QProcess(this);

connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));

QStringList list;

pProces->start("Shutdown.exe", list);

void on_read()

{

QProcess *pProces = (QProcess *)sender();

QString result = pProces->readAll();

QMessageBox::warning(NULL, "", result);

}

(3)执行的是程序,如route、ipconfig

[html] view
plain copy

QProcess p(0);

p.start("route");

p.waitForStarted();

p.waitForFinished();

qDebug()<<QString::fromLocal8Bit(p.readAllStandardError());

[html] view
plain copy

QProcess p(0);

p.start("ipconfig");

p.waitForStarted();

p.waitForFinished();

qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());

(4)执行的是命令,如dir

[html] view
plain copy

QProcess p(0);

p.start("cmd");

p.waitForStarted();

p.write("dir\n");

p.closeWriteChannel();

p.waitForFinished();

qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());

或者:

[html] view
plain copy

QProcess p(0);

p.start("cmd", QStringList()<<"/c"<<"dir");

p.waitForStarted();

p.waitForFinished();

qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());

(5)QProcess使用管道(命令中不支持管道符|)

一个进程的标准输出流到目标进程的标准输入:command1 | command2。

[html] view
plain copy

QProcess process1;

QProcess process2;

process1.setStandardOutputProcess(&process2);

process1.start("command1");

process2.start("command2");


20、当前系统Qt所支持的字体

系统支持的所有字体的名称

[cpp] view
plain copy

QFontDatabase database;

foreach (QString strFamily, database.families()) {

qDebug() <<"family:" << strFamily;

foreach (QString strStyle, database.styles(strFamily)) {

qDebug() << "-----style:" << strStyle;

}

}

系统中所有支持中文的字体名称

[cpp] view
plain copy

QFontDatabase database;

foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))

{

qDebug()<<family;

}

中文乱码:

[html] view
plain copy

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));


21、IP正则匹配

[cpp] view
plain copy

{

/**********judge ip**********/

QRegExp regExp("(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)");

if(!regExp.exactMatch(ip)) {

flag = false;

ipAddressLineEdit->clear();

ipAddressLineEdit->setError(true);

ipAddressLineEdit->setHint(tr(" IpAddress is wrong"));

}

else flag = true;

}


22、QPushButton去掉虚线框

[cpp] view
plain copy

QPushButton:focus{padding: -1;}

/*

{border-style:flat;} //扁平

button->setFlat(true)

ui->checkBox->setFocusPolicy(Qt::NoFocus);

ui->radioButton->setFocusPolicy(Qt::NoFocus);

*/


23、Qt临时获得root权限

(1)getuid()函数返回一个调用程序的真实用户ID,使用root执行程序时getuid()返回值为0。

[cpp] view
plain copy

if (getuid() != 0)

{

QMessageBox::information(0, QString(QObject::tr("Warnning")),

QString(QObject::tr("do not use root privage")),

QString(QObject::tr("OK")));

return -1;

}

(2)临时获得root权限

使用getuid()/setuid()函数,让程序临时获得root权限代码。

[cpp] view
plain copy

/*

* gcc -g -o test-uid test-uid.c

* chown root.root ./test-uid

* chmod 4755 ./test-uid

* ls -al /var

* */

#include<stdio.h>

#include<unistd.h>

#include<sys/types.h>

int main(int argc, char **argv)

{

// save user uid

uid_t uid = getuid();

// get root authorities

if(setuid(0)) {

printf("test-uid: setuid error");

return -1;

}

printf("test-uid: run as root, setuid is 0\n");

system ("touch /var/testroot");

// rollback user authorities

if(setuid(uid)) {

printf("test-uid: setuid error");

return -1;

}

printf("test-uid: run as user, setuid is %d\n", uid);

system ("touch /var/testuser");

return 0;

}


24、Qt窗口的透明度设置

(1)设置窗体的背景色

在构造函数里添加代码,需要添加头文件qpalette或qgui

QPalette pal = palette();

pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));

setPalette(pal);

通过设置窗体的背景色来实现,将背景色设置为全透。

效果:窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;窗体客户区完全透明。

(2)在MainWindow窗口的构造函数中使用如下代码:

this->setAttribute(Qt::WA_TranslucentBackground, true);

效果:窗口变透明,label也变透明,看不到文字,但是其它控件类似textEdit、comboBox就不会透明,实现了窗口背景透明。

(3)在MainWindow窗口的构造函数中使用如下代码

this->setWindowOpacity(level);其中level的值可以在0.0~1.0中变化。

效果:窗口变成透明的,但是所有控件也是一样变成透明。

(4)窗口整体不透明,局部透明:

在Paint事件中使用Clear模式绘图。

void TestWindow::paintEvent( QPaintEvent* )

{

QPainter p(this);

p.setCompositionMode( QPainter::CompositionMode_Clear );

p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );

}

效果:绘制区域全透明。如果绘制区域有控件不会影响控件

25、Qt解决中文乱码

在Windows下常使用的是GBK编码,Linux下常使用的是utf-8编。

选一下任意试试:

[html] view
plain copy

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF8"));

//获取系统编码,否则移植会出现乱码

QTextCodec*codec = QTextCodec::codecForName("System");

//设置和对本地文件系统读写时候的默认编码格式

QTextCodec::setCodecForLocale(codec);

//设置传给tr函数时的默认字符串编码

QTextCodec::setCodecForTr(codec);

//用在字符常量或者QByteArray构造QString对象时使用的一种编码方式

QTextCodec::setCodecForCStrings(codec);

支持linux单一系统时:

[html] view
plain copy

QTextCodec *codec = QTextCodec::codecForName("utf8");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);


26、图片做背景缩放

[html] view
plain copy

QPixmap backGroundPix = QPixmap(":/resources/images/login.png");

QMatrix martix;

martix.scale(0.95, 0.9);

backGroundPix = backGroundPix.transformed(martix);

resize(backGroundPix.width(), backGroundPix.height());

QPalette palette;

palette.setBrush(QPalette::Window,QBrush(backGroundPix));

setPalette(palette);

或者:

[html] view
plain copy

QPixmap backGroundPix;

backGroundPix.load(":/resources/images/login.png");

setAutoFillBackground(true); // 这个属性一定要设置

QPalette pal(palette());

pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio, \

Qt::SmoothTransformation)));

setPalette(pal);


27、Qt之界面出现、消失动画效果

(1)界面出现

将下面这段代码放在界面的构造函数当中就行

//界面动画,改变透明度的方式出现0 - 1渐变

QPropertyAnimation *animation = newQPropertyAnimation(this, "windowOpacity");

animation->setDuration(1000);

animation->setStartValue(0);

animation->setEndValue(1);

animation->start();

(2)界面消失:

既然是界面消失,应当是按下关闭按钮时界面消失,如下:

//连接关闭按钮信号和槽

QObject::connect(close_button, SIGNAL(clicked()), this,SLOT(closeWidget()));

//槽函数如下,主要进行界面透明度的改变,完成之后连接槽close来调用closeEvent事件

bool LoginDialog::closeWidget()

{

//界面动画,改变透明度的方式消失1 - 0渐变

QPropertyAnimation *animation= new QPropertyAnimation(this, "windowOpacity");

animation->setDuration(1000);

animation->setStartValue(1);

animation->setEndValue(0);

animation->start();

connect(animation,SIGNAL(finished()), this, SLOT(close()));

return true;

}

void LoginDialog::closeEvent(QCloseEvent *)

{

//退出系统

QApplication::quit();

}

界面消失的类似方法(比较笨拙,而且效率差):

void LoginDialog::closeEvent(QCloseEvent *)

{

for(int i=0; i< 100000; i++)

{

if(i<10000)

{

this->setWindowOpacity(0.9);

}

else if(i<20000)

{

this->setWindowOpacity(0.8);

}

else if(i<30000)

{

this->setWindowOpacity(0.7);

}

else if(i<40000)

{

this->setWindowOpacity(0.6);

}

else if(i<50000)

{

this->setWindowOpacity(0.5);

}

else if(i<60000)

{

this->setWindowOpacity(0.4);

}

else if(i<70000)

{

this->setWindowOpacity(0.3);

}

else if(i<80000)

{

this->setWindowOpacity(0.2);

}

else if(i<90000)

{

this->setWindowOpacity(0.1);

}

else

{

this->setWindowOpacity(0.0);

}

}

//进行窗口退出

QApplication::quit();

}


28、Qt获取系统文件图标

1、获取文件夹图标
QFileIconProvider icon_provider;

QIcon icon = icon_provider.icon(QFileIconProvider::Folder);

2、获取指定文件图标

QFileInfo file_info(name);

QFileIconProvider icon_provider;

QIcon icon = icon_provider.icon(file_info);


29、Qt把整形数据转换成固定长度字符串

有时需要把money的数字转换成固定格式,如660066转换成660,066,就需要把整形数据转换成固定长度字符串(即前面位数补0的效果)。有如下方法:

[html] view
plain copy

QString int2String(int num, int size)

{

QString str = QString::number(num);

str = str.rightJustified(size,'0');

return str;

}



[html] view
plain copy

QString int2String(int number, int size)

{

return QString("%1").arg(number, size, 10, QChar('0'));

}



[html] view
plain copy

QString int2String(int number, int size)

{

QString str;

str.fill('0', size);

str.push_back(QString::number(number));

str = str.right(size);

return str;

}

故处理数字:

[html] view
plain copy

QString value = "";

QString temp = "";

int number = 100060010;

if (number < 1000) {

value = QString::number(number);

}

else if (number < 1000 * 1000) {

value = QString::number(number/1000);

value += ",";

//temp = QString::number(number%1000);

//temp = temp.rightJustified(3,'0');

//temp.fill('0', 3);

//temp.push_back(QString::number(number));

//temp = temp.right(3);

value += QString("%1").arg(number%1000, 3, 10, QChar('0'));

}

else if (number < 1000*1000*1000) {

value = QString::number(number/(1000*1000));

value += ",";

number = number%(1000*1000);

value += QString("%1").arg(number/1000, 3, 10, QChar('0'));

value += ",";

value += QString("%1").arg(number%1000, 3, 10, QChar('0'));

}

qDebug() << "==============" << value;

输出:============== "100,060,010"


30、QLabel的强大功能

(1)QLabel的自动换行pLabel->setWordWrap(true);

[html] view
plain copy

QTextCodec *codec = QTextCodec::codecForName("utf8");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);

QLabel *pLabel = new QLabel(this);

pLabel->setStyleSheet("color: red");

//pLabel->setAlignment(Qt::AlignCenter);

pLabel->setGeometry(30, 30, 150, 150);

pLabel->setWordWrap(true);

QString strText = QString("床前明月光,疑是地上霜。举头望明月,低头思故乡。");

QString strHeightText = "<p style=\"line-height:%1%\">%2<p>";

strText = strHeightText.arg(150).arg(strText);

pLabel->setText(strText);



(2)QLabel的过长省略加tips,通过QFontMetrics来实现

[html] view
plain copy

QTextCodec *codec = QTextCodec::codecForName("utf8");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);

QLabel *pLabel = new QLabel(this);

pLabel->setStyleSheet("color: red");

pLabel->setGeometry(30, 30, 150, 150);

pLabel->setWordWrap(true);

QString strText = QString("床前明月光,疑是地上霜。举头望明月,低头思故乡。");

QString strElidedText = pLabel->fontMetrics().elidedText(strText, Qt::ElideRight, 150, Qt::TextShowMnemonic);

pLabel->setText(strElidedText);

pLabel->setToolTip(strText);



(3)QLabel的富文本

[html] view
plain copy

QTextCodec *codec = QTextCodec::codecForName("utf8");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);

QLabel *pLabel = new QLabel(this);

pLabel->setStyleSheet("color: red");

//pLabel->setAlignment(Qt::AlignCenter);

pLabel->setGeometry(30, 30, 150, 150);

pLabel->setWordWrap(true);

QString strHTML = QString("<html> \

<head> \

<style> font{color:red;} #f{font-size:18px; color: green;} </style> \

</head> \

<body>\

<font>%1</font><font id=\"f\">%2</font> \

</body> \

</html>").arg("Hello").arg("World");

pLabel->setText(strHTML);

pLabel->setAlignment(Qt::AlignCenter);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt