以前的文章有提到封装成自定义控件,以dll方式使用的弊端。今天介绍如何以提升元件的方式实现。
#include "slider_sp.h"
#include "ui_slider_sp.h"
#include<qlineedit.h>
#include<qslider.h>
Slider_sp::Slider_sp(QWidget *parent) :
QWidget(parent),
ui(new Ui::Slider_sp)
{
ui->setupUi(this);
connect(ui->lineEdit, SIGNAL(textEdited()), this, SLOT(EditChange()));
ui->lineEdit->installEventFilter(this);//设置完后自动调用其eventFilter函数
ui->horizontalSlider->installEventFilter(this);
}
Slider_sp::~Slider_sp()
{
delete ui;
}
void Slider_sp::changeName(QString str)
{
ui->label->setText(str);
}
bool Slider_sp::eventFilter(QObject *target, QEvent *event)
{
if (target == ui->lineEdit) //可替换
{
if (event->type() == QEvent::KeyPress)
{
// ui->horizontalSlider->setRange(0, 10);
int nValue = ui->lineEdit->text().toInt();
ui->horizontalSlider->setValue(nValue);
}
}
if (target == ui->horizontalSlider)
{
if (event->type() == QEvent::MouseButtonPress
|| event->type() == QEvent::MouseMove)
{
int nValue = ui->horizontalSlider->value();
QString strTemp;
strTemp.sprintf("%d", nValue); //str = "Welcome "
ui->lineEdit->setText(strTemp);
}
}
return QWidget::eventFilter(target, event);
}
void Slider_sp::EditChange(QString str)
{
int nValue = str.toInt();
ui->horizontalSlider->setValue(nValue);
}
复制以下到项目文件
在目标文件中
放入要用控件的工程中。
在项目中添加现有项目
这时VS中的QT中类似
UI界面添加一个widget元件,右键提升
点个赞,谢谢