您的位置:首页 > 文旅 > 旅游 > 十大国外室内设计网站_精准客户运营推广_今日头条官网首页_今天的重要新闻

十大国外室内设计网站_精准客户运营推广_今日头条官网首页_今天的重要新闻

2025/1/20 1:18:32 来源:https://blog.csdn.net/blqzj214817/article/details/144218820  浏览:    关键词:十大国外室内设计网站_精准客户运营推广_今日头条官网首页_今天的重要新闻
十大国外室内设计网站_精准客户运营推广_今日头条官网首页_今天的重要新闻

引言

  • 开发环境
  • 代码结构
  • 示例代码
  • 运行效果
  • 总结

使用qt实现一个列表,列表中每一项中的类似一个checkbox,通过上下键可以切换选中项,按下回车键在已经选中的项前出现对勾。且选中最后一行后,再去按向下按键会接着回滚选中第一行,按向上的按键也是类似的效果。
程序的运行效果如下:

20241203_163929

开发环境

使用ubuntu下QtCreator4.11.。
在这里插入图片描述

代码结构

这里将项目的结构截图贴上,为了更好的复现项目 。
项目结构图如下:
在这里插入图片描述
ui文件中的控件采用在项目中用代码实现,没有在ui设计器中拖控件,是项目生成时生成的dialog.ui。

示例代码

本示例中有两个类可以单独拿来使用,作为自定义的checkbox,分别为MyCheckBox类和MyCheckMarkIcon类。这两个类用来实现一个自定义的checkbox。
下面是具体实现代码。
mycheckmarkicon.h

#ifndef MYCHECKMARKICON_H
#define MYCHECKMARKICON_H#include <QObject>
#include <QWidget>class MyCheckMarkIcon : public QWidget
{Q_OBJECT
public:explicit MyCheckMarkIcon(QWidget *parent = nullptr);void setColor(const QColor& color);void setSelected(const bool& bIsSelected);bool getSelected()const;
protected:void paintEvent(QPaintEvent *event) override;
signals:
private:QColor m_color;QColor m_backColor;//背景色bool m_bIsSelected;//是否选中
};#endif // MYCHECKMARKICON_H

mycheckmarkicon.cpp

#include "mycheckmarkicon.h"#include <QPainter>
#include <QStyleOption>MyCheckMarkIcon::MyCheckMarkIcon(QWidget *parent) : QWidget(parent),m_color(Qt::transparent)
{setFixedSize(20,20);
}void MyCheckMarkIcon::setColor(const QColor &color)
{m_color = color;m_bIsSelected == true?m_backColor=Qt::yellow:m_backColor = QColor("#6A5ACD");update();
}void MyCheckMarkIcon::setSelected(const bool &bIsSelected)
{m_bIsSelected = bIsSelected;
}bool MyCheckMarkIcon::getSelected() const
{return m_bIsSelected;
}void MyCheckMarkIcon::paintEvent(QPaintEvent *event)
{QPainter painter(this);QPen pen(Qt::SolidLine);pen.setWidth(2);pen.setBrush(m_backColor);QRect rect(0,0,20,20);painter.fillRect(rect,m_backColor);//绘制填充矩形pen.setColor(m_color);painter.setPen(pen);QPainterPath path;path.moveTo(rect.left()+5,rect.right()-5);path.lineTo(rect.left()+10,rect.bottom());path.lineTo(rect.left()+15,rect.top()+5);painter.strokePath(path,pen);//使用指定的笔在路径上绘制轮廓
}

mycheckbox.h

#ifndef MYCHECKBOX_H
#define MYCHECKBOX_H#include <QWidget>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com