Qt/C++实现的效果比较好的界面,实现圆角窗口,窗口阴影部分,列表添加widget,使用listWidget添加自定义item,自定义的日历控件左侧是日历右侧是滚动可选的时间。 列表以报文数据的形式显示,界面使用QSS样式表实现,界面效果不错。 可代码讲解。 源码: 使用Qt5.6.1_MinGW、Qt5.13.1_MinGW、Qt5.15.1_MinGW编译通过,其他Qt版本请自行尝试。

在Qt开发中,实现一个美观且功能丰富的界面是众多开发者的追求。今天就来聊聊如何用Qt/C++实现一系列超赞的界面效果,包括圆角窗口、窗口阴影、列表添加自定义widget以及自定义日历控件。

圆角窗口与窗口阴影

实现圆角窗口,主要借助于QRegionsetMask函数。先看代码:

// 设置窗口为圆角
QRegion region(this->rect(), QRegion::Ellipse);
this->setMask(region);

这里通过创建一个QRegion对象,形状为椭圆,然后将窗口设置为该形状的遮罩,这样窗口就呈现出圆角效果啦。

窗口阴影的实现,利用QGraphicsDropShadowEffect类,代码如下:

// 创建阴影效果对象
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
shadow->setBlurRadius(10);
shadow->setColor(Qt::gray);
shadow->setOffset(3, 3);
// 将阴影效果应用到窗口
this->setGraphicsEffect(shadow);

QGraphicsDropShadowEffect可以设置阴影的模糊半径(setBlurRadius)、颜色(setColor)和偏移量(setOffset),让窗口阴影更加自然。

列表添加widget与自定义item

使用listWidget添加自定义item是很常见的需求。先自定义一个继承自QWidget的类作为item的布局,假设叫CustomListItem

class CustomListItem : public QWidget
{
    Q_OBJECT
public:
    CustomListItem(QWidget *parent = nullptr);
};

CustomListItem::CustomListItem(QWidget *parent)
    : QWidget(parent)
{
    // 这里可以添加自定义布局和控件
    QLabel *label = new QLabel("Custom Item", this);
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(label);
}

然后在主窗口中添加这个自定义item到listWidget

QListWidget *listWidget = new QListWidget(this);
CustomListItem *itemWidget = new CustomListItem();
QListWidgetItem *item = new QListWidgetItem(listWidget);
item->setSizeHint(itemWidget->sizeHint());
listWidget->addItem(item);
listWidget->setItemWidget(item, itemWidget);

这段代码先创建了listWidget,然后实例化自定义item的widget,接着创建QListWidgetItem,设置其大小提示为自定义widget的大小提示,最后将item添加到listWidget并设置对应的widget。

自定义日历控件

自定义日历控件左侧是日历,右侧是滚动可选的时间。先创建日历部分,使用QCalendarWidget

QCalendarWidget *calendar = new QCalendarWidget(this);

右侧滚动可选时间可以用QScrollArea结合QVBoxLayout来实现,假设每个时间项是一个QLabel

QScrollArea *scrollArea = new QScrollArea(this);
QWidget *scrollWidget = new QWidget();
QVBoxLayout *scrollLayout = new QVBoxLayout(scrollWidget);
for (int i = 0; i < 24; ++i) {
    QLabel *timeLabel = new QLabel(QString::number(i) + ":00 - " + QString::number(i) + ":59");
    scrollLayout->addWidget(timeLabel);
}
scrollWidget->setLayout(scrollLayout);
scrollArea->setWidget(scrollWidget);

然后将日历和滚动区域布局到一个主布局中:

QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(calendar);
mainLayout->addWidget(scrollArea);
this->setLayout(mainLayout);

界面样式与编译

界面使用QSS样式表来实现整体风格的统一,比如设置窗口背景色、字体颜色等,样式表如下:

QWidget {
    background-color: #f0f0f0;
    color: #333;
}

这样就设置了窗口背景为浅灰色,字体颜色为深灰色。

源码使用Qt5.6.1MinGW、Qt5.13.1MinGW、Qt5.15.1_MinGW编译通过,其他Qt版本大家可以自行尝试。不同版本可能会因为API的微小变化需要做一些调整,但整体思路还是一致的。

通过以上步骤,就能实现一个效果不错的Qt界面啦,从独特的外观到丰富的功能,相信能满足不少项目的界面需求。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐