C++QT5跨平台界面编程原理--QLabel,QPushButton,QLineEdit

 

1、QLabel

●显示文字,换行显示

	QString str = QStringLiteral("测试的中文\n001xcj");
	ui.label->setText(str);


●样式设置字体、颜色、背景色


●显示图片

qss:

3种


●播放gif动画
●界面创建,手动创建

QLabel播放gif动画

#include "qlabeltest.h"
#include <QMovie>
QLabelTest::QLabelTest(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	///******手动创建QLabel 播放gif动画********
	QLabel *lab2 = new QLabel(this);//创建label
	lab2->setGeometry(0, 0, 200, 200);//设置位置和大小
	lab2->setStyleSheet("background-color:rgb(161, 220, 247);"); //设置样式表
	QMovie *mov = new QMovie("test.gif");//创建QMovie
	lab2->setMovie(mov);//放入label中
	lab2->show(); //显示
	mov->start(); //开始播放
}

可以不依赖于QWidget,独立显示

#include "qlabeltest.h"
#include <QtWidgets/QApplication>
#include <QMovie>
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);


     //直接写到这里即可,独立显示
	QLabel *lab2 = new QLabel();
	lab2->setGeometry(100, 100, 300, 300);
	lab2->setStyleSheet("background-color:rgb(161, 220, 247);");
	QMovie *mov = new QMovie("test.gif");
	lab2->setMovie(mov);
	lab2->show();
	mov->start();


	QLabelTest w;
	w.show();
	return a.exec();
}

QLabel富文本显示并处理链接点击和hover信号

QLabel    setTextFormat

●PlainText,  \n换行
●RichText,  支持html

ui生成的代码:

 label_test->setTextFormat(Qt::RichText);

只有这个是不能响应事件的。还需要链接事件

QLabel链接事件

信号函数

●void linkActivated(const QString &link)  //链接被点击
●void linkHovered(const QString &link)   //鼠标移到上面

槽函数

public slots :

    void Act(QString url)
    {
        qDebug() << "click" << url << endl;
    }
    void Hov(QString url)
    {
        qDebug() << "Hover" << url << endl;
    }


void MainWindow::Hov(QString url)
{
   qDebug() << ui->label_test->text();//可以打印内容
}


QLabel选择和编辑

●setTextInteractionFlags   设置参数
●selectedText  知道选择了什么文本
●setSelection
   

label_test->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard

  |Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextEditable
  |Qt::TextEditorInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse);
void MainWindow::Hov()
{
   qDebug() << ui->label_test->selectedText();  //打印选中的文本
}

 

void MainWindow::Hov()
{
    ui->label_test->setSelection(2,5);//从第几个开始,选中几个
}



2、QPushButton

事件设置

QPushButton事件信号

基类的

●click()

●click(bool)是否选中

变成可选择之后,按一次状态改变一次True 和 False交替变化



●pressed()   按住
●released()  松开

 

快捷键设置

QPushButon快捷键设置组合键顺序按键激发信号

1.&+英文名字   ====》快捷键 Alt + 名字首字母

2.

    //按钮快捷键设置
    ui->shortButton->setShortcut(tr("X"));
    ui->shortButton->setShortcut(tr("Ctrl+X"));
    ui->shortButton->setShortcut(tr("Ctrl+X,A"));

样式设置

●背景色、字体及颜色
●背景图片FLAT

flat 平的 

●圆角边框


●渐变圆角光泽按钮  &  QPushButton通过qss实现鼠标悬停设置不同的渐变背景

//放上鼠标
QPushButton::hover{  
background-color: qlineargradient(spread:reflect, x1:0.994, y1:0.511, x2:1, y2:0, stop:0.596591 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));
}
//不放鼠标
QPushButton::!hover{
background-color: qlineargradient(spread:reflect, x1:0.989, y1:0.499727, x2:1, y2:0.0113636, stop:0.244318 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));
}

3、QLineEdit

●setText设置文本

ui.lineEdit->setText("lineedit test");	

ui.lineEdit->setPlaceholderText(QString::fromLocal8Bit("提示输入"));

●text() 获取文本
●setPlaceholderText设置 提示文字
●setClearButton Enabled


●setReadOnly


●setMaxLength

重做和撤销

●undo()槽   撤销
●redo()槽    恢复

QLineEdit输入检验

●格式掩码

setInputMask("000.000.000.000;_");

●格式校验(整数、浮点数、正则表达式)

setInputMask("AAAAA;_");


QLineEdit信号

●editingFinished 按下回车、焦点移开
●returnPressed 格式有效


●textChanged  setText() 也激发
●textEdited  手动修改才会激发

QValidator

QIntValidator *ival = new QIntValidator();
ival-> setRange(10, 100000000);
ui.iedit- > setValidator(ival);


QDoubleValidator *dval = new QDoubleValidator();
dval-> setRange(10, 100000000);
dval-> setDecimals(3);//精度
ui.dedit- > setValidator(dval);
	QDoubleValidator *dval = new QDoubleValidator();
	dval->setRange(-100, 10000,3);
	//不用科学计数法 
	dval->setNotation(QDoubleValidator::StandardNotation);
	ui.dedit->setValidator(dval);

QRegExpValidator

	//验证邮箱 xcxj123@x123.com
	QRegExp exp("[a-zA-Z0-9-_]+@ [a-zA-Z0-9-_]+\\.[a-zA-Z]+");
	QRegExpValidator *rval = new QRegExpValidator(exp);
	ui.email->setValidator(rval);

可以校验:

    ui.label->setText(ui.email->text());
	//格式不正确提示
	const QValidator *v = ui.email->validator();
	int pos = 0;
	/*
	返回
	    enum State {
        Invalid, 不正确
        Intermediate, 中间没输入结束 111@113.
        Acceptable 格式正确
    };*/
	if (v->validate(ui.email->text(), pos) != QValidator::Acceptable)
	{
		ui.label->setText(QString::fromLocal8Bit("邮箱格式不正确!"));
	}

QLineEdit的qss样式设置

QLineEdit设置显示模式(密码)

●Normal, NoEcho, Password, PasswordEchoOnEdit   模式
●setEchoMode(QLineEdit::Normal);

QLineEdit{
	border:3px dotted  rgba(255,0,0,150);
	border-radius:10px;
}

QLineEdit样式表-特殊符号编码

QLineEdit[echoMode="2"]{
	lineedit-password-charactor:9738
}


.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值