精华内容
下载资源
问答
  • 下拉界面展示模糊查询项目效果思路代码主界面ui界面头文件源文件下拉界面ui界面头文件源文件谢谢~~~ 效果 思路 输入栏使用linEdit ,获取焦点,展示下拉界面,界面显示当前栏位内内容的模糊查询信息;失去焦点或...

    效果

    在这里插入图片描述

    思路

     输入栏使用linEdit  ,获取焦点,展示下拉界面,界面显示当前栏位内内容的模糊查询信息;失去焦点或点击界面其他位置,下拉界面小时。
     下拉界面使用QWidget,根据lineEdit的内容展示对应的信息
    

    代码

    主界面

    ui界面

    在这里插入图片描述
    一个输入栏 ,剩下的是模拟查询结果展示栏位

    头文件

        virtual void showEvent(QShowEvent *event);
        virtual void resizeEvent(QResizeEvent *event);
    
        virtual bool eventFilter(QObject *watched, QEvent *event);
        virtual void mousePressEvent(QMouseEvent *event);
    
    
        QStringList strs;                   //初始化的信息   本程序为构造函数内 静态信息 后续可以在数据库动态获取
    
        void initShowR();                   //初始化 showR界面信息 尺寸、位置
        void setLineEditText(QString text); //设置文本框内容
    
    private slots:
    
        void on_lineEdit_textChanged(const QString &arg1);      //编辑时触发
    

    源文件

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    extern ShowResult *showR;
    
    MainWindow *mainWin;
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        mainWin = this;
    
        ui->lineEdit->installEventFilter(this);
        showR = new ShowResult(this);
    
    
        strs << "A1"<<"A2"<< "A3"<< "A4"<< "B1"<< "B2"<< "B3"<< "B4";
        strs << "C1"<<"C2"<< "C3"<< "C4"<< "D1"<< "D2"<< "D3"<< "D4";
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    /**
     * @brief MainWindow::showEvent
     * @param event
     * 展示事件
     */
    void MainWindow::showEvent(QShowEvent *event)
    {
        initShowR();
        showR->hide();                      //隐藏展示
    }
    
    /**
     * @brief MainWindow::resizeEvent
     * @param event
     * 尺寸发生变化事件
     */
    void MainWindow::resizeEvent(QResizeEvent *event)
    {
        initShowR();
    }
    
    /**
     * @brief MainWindow::eventFilter
     * @param watched
     * @param event
     * @return
     * 事件过滤器
     */
    bool MainWindow::eventFilter(QObject *watched, QEvent *event)
    {
        if(watched == ui->lineEdit)
        {
            if(event->type() == QEvent::FocusIn)
            {
                showR->show();      //如果获得焦点  就展示下拉界面
            }
            else if(event->type() == QEvent::FocusOut)
            {
    
            }
        }
        return QObject::eventFilter(watched,event);
    }
    
    /**
     * @brief MainWindow::mousePressEvent
     * @param event
     * 如果鼠标单击界面 下拉界面就隐藏不显示
     * 如果当前栏位有焦点,将焦点转移至空栏位
     */
    void MainWindow::mousePressEvent(QMouseEvent *event)
    {
        qDebug() << "mouse press";
        showR->hide();
        if(ui->lineEdit->hasFocus())
        {
            ui->lineEdit_2->setFocus();
        }
    }
    
    /**
     * @brief MainWindow::initShowR
     * 设置界面的位置 尺寸
     */
    void MainWindow::initShowR()
    {
        showR->move(ui->lineEdit->x(),ui->lineEdit->y()+ui->lineEdit->height());
        showR->setFixedWidth(ui->lineEdit->width());
        on_lineEdit_textChanged(ui->lineEdit->text());
        showR->setFixedHeight(ui->lineEdit->height()*7);
    
    }
    
    /**
     * @brief MainWindow::setLineEditText
     * @param text
     * 展示界面信息
     */
    void MainWindow::setLineEditText(QString text)
    {
        int num;
        ui->lineEdit->setText(text);
        num = 1;
        ui->lineEdit_A->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_B->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_C->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_D->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_E->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_F->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_G->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_H->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_I->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_J->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_K->setText(tr("%2_num:%1").arg(num).arg(text));num++;
        ui->lineEdit_L->setText(tr("%2_num:%1").arg(num).arg(text));
    
    }
    
    
    /**
     * @brief MainWindow::on_lineEdit_textChanged
     * @param arg1
     * 栏位被编辑时,触发的槽函数
     */
    void MainWindow::on_lineEdit_textChanged(const QString &arg1)
    {
        QStringList ss;
        QString s;
        for(int i = 0;i<strs.size();i++)    //遍历我们存储的所有信息 后续是数据库查询
        {
            s = strs.at(i);                 //一次获得元素
            if(s.contains(arg1))            //模糊匹配 当前的信息被包含在这一元素内
            {
                ss.append(s);               //存储在新的list内 准备显示
            }
        }
        showR->strs = ss;                   //下拉界面的变量赋值
        showR->showTable();                 //下拉界面展示查询到的信息
    }
    
    

    下拉界面

    ui界面

    在这里插入图片描述

    头文件

        virtual void showEvent(QShowEvent *event);
    
        void showTable();               //展示信息
    
        QStringList strs;               //存储需要展示的信息
    
    private slots:
        void on_tableWidget_activated(const QModelIndex &index);    //选择栏触发槽函数
    

    源文件

    #include "showresult.h"
    #include "ui_showresult.h"
    
    extern MainWindow *mainWin;
    
    ShowResult *showR;
    ShowResult::ShowResult(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::ShowResult)
    {
        ui->setupUi(this);
        showR = this;
        this->setWindowFlags (Qt::FramelessWindowHint);         //设置窗口无边框
        ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//延伸显示(水平铺满)
        ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);            //只读 不允许编辑
        ui->tableWidget->setShowGrid(false);                    //网格线不显示
    }
    
    ShowResult::~ShowResult()
    {
        delete ui;
    }
    
    void ShowResult::showEvent(QShowEvent *event)
    {
        showTable();        //展示信息
    }
    
    /**
     * @brief ShowResult::showTable
     * 展示信息
     */
    void ShowResult::showTable()
    {
        ui->tableWidget->clear();   //表格先清除
        QTableWidgetItem *item;
        QString str;
        ui->tableWidget->setRowCount(strs.size());  //创建行 有多少信息 创建多少行
        for(int i = 0;i<strs.size();i++)
        {
            str = strs.at(i);
            item = new QTableWidgetItem(str);       //创建项 显示字符串几个内的元素内容
    
            ui->tableWidget->setItem(i,0,item);     //添加项
        }
    }
    
    /**
     * @brief ShowResult::on_tableWidget_activated
     * @param index
     * 表格选择
     */
    void ShowResult::on_tableWidget_activated(const QModelIndex &index)
    {
        qDebug() << index.row();
        qDebug() << index.column();
        QString text;
        text = ui->tableWidget->item(index.row(),index.column())->text();   //触发的栏位内容
        mainWin->setLineEditText(text);     //将主页面的栏位内容修改为传递的内容 可以根据这一内容进行数据库查询对应的其他信息
        this->hide();                       //当前界面隐藏
    }
    
    

    谢谢~~~

    项目内数据皆为静态数据,动态数据需要数据库或者文件导入。

    展开全文
  • 感觉iOS的那种上拉下拉界面的功能很好,所以今天在项目中也加了,都实现了,把项目中的例子拿出来给大家分享一下主要是重写ScrollView,xml布局也是一样的,只能有一个LinearLayout或者RelativeLayout布局,如下就是...

    感觉iOS的那种上拉下拉界面的功能很好,所以今天在项目中也加了,都实现了,把项目中的例子拿出来给大家分享一下


    主要是重写ScrollView,xml布局也是一样的,只能有一个LinearLayout或者RelativeLayout布局,如下就是,里面的注释很详细,都能看懂

    public class MyReboundScrollView extends ScrollView {
    
        private static final String TAG = "ElasticScrollView";
    
        //移动因子, 是一个百分比, 比如手指移动了100px, 那么View就只移动50px
        //目的是达到一个延迟的效果
        private static final float MOVE_FACTOR = 0.5f;
    
        //松开手指后, 界面回到正常位置需要的动画时间
        private static final int ANIM_TIME = 100;
    
        //ScrollView的子View, 也是ScrollView的唯一一个子View
        private View contentView;
    
        //手指按下时的Y值, 用于在移动时计算移动距离
        //如果按下时不能上拉和下拉, 会在手指移动时更新为当前手指的Y值
        private float startY;
    
        //用于记录正常的布局位置
        private Rect originalRect = new Rect();
    
        //手指按下时记录是否可以继续下拉
        private boolean canPullDown = false;
    
        //手指按下时记录是否可以继续上拉
        private boolean canPullUp = false;
    
        //在手指滑动的过程中记录是否移动了布局
        private boolean isMoved = false;
    
        public MyReboundScrollView(Context context) {
            super(context);
        }
    
        public MyReboundScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @SuppressLint("MissingSuperCall")
        @Override
        protected void onFinishInflate() {
            if (getChildCount() > 0) {
                contentView = getChildAt(0);
            }
        }
    
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            super.onLayout(changed, l, t, r, b);
    
            if(contentView == null) return;
    
            //ScrollView中的唯一子控件的位置信息, 这个位置信息在整个控件的生命周期中保持不变
            originalRect.set(contentView.getLeft(), contentView.getTop(), contentView
                    .getRight(), contentView.getBottom());
        }
    
        //在触摸事件中, 处理上拉和下拉的逻辑
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
    
            if (contentView == null) {
                return super.dispatchTouchEvent(ev);
            }
    
            int action = ev.getAction();
    
            switch (action) {
                case MotionEvent.ACTION_DOWN:
    
                    //判断是否可以上拉和下拉
                    canPullDown = isCanPullDown();
                    canPullUp = isCanPullUp();
    
                    //记录按下时的Y值
                    startY = ev.getY();
                    break;
    
                case MotionEvent.ACTION_UP:
    
                    if(!isMoved) break;  //如果没有移动布局, 则跳过执行
    
                    // 开启动画
                    TranslateAnimation anim = new TranslateAnimation(0, 0, contentView.getTop(),
                            originalRect.top);
                    anim.setDuration(ANIM_TIME);
    
                    contentView.startAnimation(anim);
    
                    // 设置回到正常的布局位置
                    contentView.layout(originalRect.left, originalRect.top,
                            originalRect.right, originalRect.bottom);
    
                    //将标志位设回false
                    canPullDown = false;
                    canPullUp = false;
                    isMoved = false;
    
                    break;
                case MotionEvent.ACTION_MOVE:
    
                    //在移动的过程中, 既没有滚动到可以上拉的程度, 也没有滚动到可以下拉的程度
                    if(!canPullDown && !canPullUp) {
                        startY = ev.getY();
                        canPullDown = isCanPullDown();
                        canPullUp = isCanPullUp();
    
                        break;
                    }
    
                    //计算手指移动的距离
                    float nowY = ev.getY();
                    int deltaY = (int) (nowY - startY);
    
                    //是否应该移动布局
                    boolean shouldMove =
                            (canPullDown && deltaY > 0)    //可以下拉, 并且手指向下移动
                                    || (canPullUp && deltaY< 0)    //可以上拉, 并且手指向上移动
                                    || (canPullUp && canPullDown); //既可以上拉也可以下拉(这种情况出现在ScrollView包裹的控件比ScrollView还小)
    
                    if(shouldMove){
                        //计算偏移量
                        int offset = (int)(deltaY * MOVE_FACTOR);
    
                        //随着手指的移动而移动布局
                        contentView.layout(originalRect.left, originalRect.top + offset,
                                originalRect.right, originalRect.bottom + offset);
    
                        isMoved = true;  //记录移动了布局
                    }
    
                    break;
                default:
                    break;
            }
    
            return super.dispatchTouchEvent(ev);
        }
    
    
        //判断是否滚动到顶部
        private boolean isCanPullDown() {
            return getScrollY() == 0 ||
                    contentView.getHeight() < getHeight() + getScrollY();
        }
    
        //判断是否滚动到底部
        private boolean isCanPullUp() {
            return  contentView.getHeight() <= getHeight() + getScrollY();
        }
    }
    


    在布局中引用就是了

    如:

    <com.xxx.MyReboundScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background"
        android:scrollbars="none"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >

    </LinearLayout>
    </com.xxx.MyReboundScrollView>
    展开全文
  • 基于QCombBox实现下拉框可勾选多个,初始的QComboBox只能选择一个,需要资源可私信。
  • 这是基于LabVIEW的自动收缩菜单栏,这是一个思路,可以参考,用来美化GUI,,,,,,,,,,,,
  • 1.sldingdrawer下拉界面 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1228581,如需转载请自行联系原作者 ...
    1.sldingdrawer下拉界面




    本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1228581,如需转载请自行联系原作者

    展开全文
  • Android 仿iOS上拉下拉界面的效果实现

    千次阅读 2016-09-29 15:11:21
    感觉iOS的那种上拉下拉界面的功能很好,所以今天在项目中也加了,都实现了,把项目中的例子拿出来给大家分享一下 主要是重写ScrollView,xml布局也是一样的,只能有一个LinearLayout或者RelativeLayout布局,如下...

    感觉iOS的那种上拉下拉界面的功能很好,所以今天在项目中也加了,都实现了,把项目中的例子拿出来给大家分享一下


    主要是重写ScrollView,xml布局也是一样的,只能有一个LinearLayout或者RelativeLayout布局,如下就是,里面的注释很详细,都能看懂

    public class MyReboundScrollView extends ScrollView {
    
        private static final String TAG = "ElasticScrollView";
    
        //移动因子, 是一个百分比, 比如手指移动了100px, 那么View就只移动50px
        //目的是达到一个延迟的效果
        private static final float MOVE_FACTOR = 0.5f;
    
        //松开手指后, 界面回到正常位置需要的动画时间
        private static final int ANIM_TIME = 100;
    
        //ScrollView的子View, 也是ScrollView的唯一一个子View
        private View contentView;
    
        //手指按下时的Y值, 用于在移动时计算移动距离
        //如果按下时不能上拉和下拉, 会在手指移动时更新为当前手指的Y值
        private float startY;
    
        //用于记录正常的布局位置
        private Rect originalRect = new Rect();
    
        //手指按下时记录是否可以继续下拉
        private boolean canPullDown = false;
    
        //手指按下时记录是否可以继续上拉
        private boolean canPullUp = false;
    
        //在手指滑动的过程中记录是否移动了布局
        private boolean isMoved = false;
    
        public MyReboundScrollView(Context context) {
            super(context);
        }
    
        public MyReboundScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @SuppressLint("MissingSuperCall")
        @Override
        protected void onFinishInflate() {
            if (getChildCount() > 0) {
                contentView = getChildAt(0);
            }
        }
    
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            super.onLayout(changed, l, t, r, b);
    
            if(contentView == null) return;
    
            //ScrollView中的唯一子控件的位置信息, 这个位置信息在整个控件的生命周期中保持不变
            originalRect.set(contentView.getLeft(), contentView.getTop(), contentView
                    .getRight(), contentView.getBottom());
        }
    
        //在触摸事件中, 处理上拉和下拉的逻辑
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
    
            if (contentView == null) {
                return super.dispatchTouchEvent(ev);
            }
    
            int action = ev.getAction();
    
            switch (action) {
                case MotionEvent.ACTION_DOWN:
    
                    //判断是否可以上拉和下拉
                    canPullDown = isCanPullDown();
                    canPullUp = isCanPullUp();
    
                    //记录按下时的Y值
                    startY = ev.getY();
                    break;
    
                case MotionEvent.ACTION_UP:
    
                    if(!isMoved) break;  //如果没有移动布局, 则跳过执行
    
                    // 开启动画
                    TranslateAnimation anim = new TranslateAnimation(0, 0, contentView.getTop(),
                            originalRect.top);
                    anim.setDuration(ANIM_TIME);
    
                    contentView.startAnimation(anim);
    
                    // 设置回到正常的布局位置
                    contentView.layout(originalRect.left, originalRect.top,
                            originalRect.right, originalRect.bottom);
    
                    //将标志位设回false
                    canPullDown = false;
                    canPullUp = false;
                    isMoved = false;
    
                    break;
                case MotionEvent.ACTION_MOVE:
    
                    //在移动的过程中, 既没有滚动到可以上拉的程度, 也没有滚动到可以下拉的程度
                    if(!canPullDown && !canPullUp) {
                        startY = ev.getY();
                        canPullDown = isCanPullDown();
                        canPullUp = isCanPullUp();
    
                        break;
                    }
    
                    //计算手指移动的距离
                    float nowY = ev.getY();
                    int deltaY = (int) (nowY - startY);
    
                    //是否应该移动布局
                    boolean shouldMove =
                            (canPullDown && deltaY > 0)    //可以下拉, 并且手指向下移动
                                    || (canPullUp && deltaY< 0)    //可以上拉, 并且手指向上移动
                                    || (canPullUp && canPullDown); //既可以上拉也可以下拉(这种情况出现在ScrollView包裹的控件比ScrollView还小)
    
                    if(shouldMove){
                        //计算偏移量
                        int offset = (int)(deltaY * MOVE_FACTOR);
    
                        //随着手指的移动而移动布局
                        contentView.layout(originalRect.left, originalRect.top + offset,
                                originalRect.right, originalRect.bottom + offset);
    
                        isMoved = true;  //记录移动了布局
                    }
    
                    break;
                default:
                    break;
            }
    
            return super.dispatchTouchEvent(ev);
        }
    
    
        //判断是否滚动到顶部
        private boolean isCanPullDown() {
            return getScrollY() == 0 ||
                    contentView.getHeight() < getHeight() + getScrollY();
        }
    
        //判断是否滚动到底部
        private boolean isCanPullUp() {
            return  contentView.getHeight() <= getHeight() + getScrollY();
        }
    }
    


    在布局中引用就是了

    如:

    <com.xxx.MyReboundScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background"
        android:scrollbars="none"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >

    </LinearLayout>
    </com.xxx.MyReboundScrollView>

    效果如下:


    
    

    展开全文
  • Android图书管理系统APP源码,侧滑菜单及下拉刷新,更删改查,供大家下载学习!!!
  • 网站下拉界面的实现

    千次阅读 热门讨论 2014-12-28 16:05:28
     大家在逛网站的时候有没有遇到过,操作失误时会从网站顶端出现下拉框的提示,或者在某个网站的首页单击 ...这里实现下拉界面的动态效果就是通过JQuery来实现的,明白了这些做起来就顺畅了。
  • 1.需求:像Ios那样上拉下拉实现动画回弹效果 效果图: 2.具体实现:继承ScrollView,重写dispatchTouchEvent()方法,判断上下滑动,计算距离,手指松开后实现动画效果,回到正常布局位置。 实现代码: package...
  • 下拉刷新界面,代码,,库
  • 上拉、下拉刷新界面

    2016-07-19 20:13:14
    上拉、下拉刷新界面
  • android界面下拉刷新代码
  • 微信小程序下拉刷新界面的实现 利用onPullDownRefresh函数设置下拉刷新功能 一、在app.json中,将window选项中的enablePullDownRefresh设为true window:{ enablePullDownRefresh:true }  或者在要刷新的界面...
  • UItableview下拉刷新界面

    千次阅读 2014-01-07 14:29:08
    以前看到facebook,人人和其他的一些应用,很多都使用了下拉列表,列表就重新加载数据的应用.感觉用户体验很好,但是一直没有时间找相应的解决方法,今天终于有时间整理一下代码: 下图是实现的效果图,当用户下拉列表的...
  • ListView下拉刷新界面UI

    2012-07-05 13:55:27
    ListView下拉,再释放后,刷新listview中的数据
  • 该模板具有下拉登录框,具有较大的空间对网站进行介绍。 界面简洁。
  • 微信小程序下拉刷新界面

    千次阅读 2017-08-29 15:33:34
    利用onPullDownRefresh函数设置下拉刷新功能 一、在app.json中,将window选项中的enablePullDownRefresh设为true "window":{ "enablePullDownRefresh":true }  或者在要刷新的界面的XXX.json中设置...
  • 代码是从Android Ultra-Pull-To-Refresh下拉刷新提出来的。主要是仿QQ聊天界面旋转小圆圈的下拉刷新以及Ultra如何使用
  • AnimatedDropdownMenu 整洁的界面下拉菜单
  • jquery 下拉菜单,界面简洁漂亮,使用简单
  • java图形用户界面下拉列表下拉列表常用方法:*JComboBox(): 创建一个没有选项的下拉列表*addItem():增加选项*getSelectedIndex():返回选中的下拉列表选项的索引*getSelectedItem():返回选中的下拉列表选项*...
  • 就像随便打开一条微信公众号,查看一个别人推送的信息,内容部分就可以下拉
  • 下拉列表测试界面.rar

    2019-05-28 15:56:18
    用MFC下拉框列表实现选择操作功能
  • 下拉刷新个人模糊界面 最近学习做项目,遇到各种有趣实用的框架demo,今天从中跟大家分享下个人界面实现下拉刷新,图片模糊显示的小界面,具体的代码就不会进行详细的翻译了,主要本人数学太渣,对于一些算法简直...
  • 主要为大家详细介绍了js实现前端界面导航栏下拉列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 个人信息界面 下拉头部图片视图跟随变化。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,203
精华内容 2,881
关键字:

下拉界面