阅读网 购物 网址 万年历 小说 | 三丰软件 天天财富 小游戏
TxT小说阅读器
↓小说语音阅读,小说下载↓
一键清除系统垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放,产品展示↓
佛经: 故事 佛经 佛经精华 心经 金刚经 楞伽经 南怀瑾 星云法师 弘一大师 名人学佛 佛教知识 标签
名著: 古典 现代 外国 儿童 武侠 传记 励志 诗词 故事 杂谈 道德经讲解 词句大全 词句标签 哲理句子
网络: 舞文弄墨 恐怖推理 感情生活 潇湘溪苑 瓶邪 原创 小说 故事 鬼故事 微小说 耽美 师生 内向 易经 后宫 鼠猫 美文
教育信息 历史人文 明星艺术 人物音乐 影视娱乐 游戏动漫 | 穿越 校园 武侠 言情 玄幻 经典语录 三国演义 西游记 红楼梦 水浒传
 
  阅读网 -> 明星艺术 -> 如何使用 QtWidget 写出好看的界面? -> 正文阅读

[明星艺术]如何使用 QtWidget 写出好看的界面?

[收藏本文] 【下载本文】
QML 固然能轻易做到这点,但是太大了。。。 然后 QSS 感觉又挺麻烦...还是有点难搞得好看 希望能给点例子之类的,谢谢!
都是qss搞的,还行吧
一个工具,还在写。














尝试写一个qss工具


12月更新
我把基础的无边框窗口整理出来了,包括正常功能,大家如果有需要,可以直接在这个窗口的基础上开发。
https://github.com/HuaGouFdog/Fdog-Kit/tree/main/Fdog-Kit-MainWindows
界面好看是美工的事。
程序员真的没必要在这个问题上挑战别人的饭碗。
你很快会发现,界面好不好看,与编程框架没太大关系。
你只要能做到按照美工要求像素级复刻,那就够了。
而编程框架,只要能够实现美工出的图,那就不会影响最终效果。除非它非常拉垮,以至于无法正确实现美工的设计。
纯qwidget,只要有qpainter这个最基础的绘制工具,就可以实现任何风格
但有个前提,需要花费大量时间去搭建基础组件,好处是性能好,坏处是废时间,不过基础组件重构完就可以无限复用了
风格来自于 Material Design3
creeper5820/creeper-qt?github.com/creeper5820/creeper-qt


数据库大作业也是用这个做的:




放几个视频展示一下动画效果, 做得比较谨慎, 非线性的运动效果是用 PID 跟踪的(纯P), 所以可以被随意打断, 之前使用QT自带的Animation类实现, 发现打断效果有问题, 不知道是不是使用方式不对

0

0
不知道你如何定义“好看”,这也和每个人的审美有关,闲话少言,直接上例子。
使用 QT QWidgets/C++ MSVC编译器写的一款快速启动软件。
软件打包压缩后10-20MB。
根据问题,我就仅仅围绕UI来展开描述
多图回答 多图回答 多图回答
主界面


属性界面
属性界面,简述模式


属性界面 展开模式


提取图标


设置界面




皮肤设置






皮肤预览
纯色 绿+白


亚克力纯色


亚克力图片




今晚就去你家


卡卡西


小汤姆


蒂法


水下世界


结语
软件如何设计和美化,应该根据软件定位来定义。一个快速启动的小工具,没必要拿即时通讯,资源管理等软件的UI比较。最适合,就是最好的。最能让用户简单实用,即目标达成。程序员不能仅仅娱乐自己。除非你仅仅和自己沟通交流。
很早的时候曾经尝试过使用Qt开发地图编辑器,界面自认为还行




https://github.com/529324416/MapEditor?github.com/529324416/MapEditor
不过这个玩意只做了一半就不做了,所以最好是只看跟UI相关的代码,我用C写了一个简单的Layout布局计算库,整体的布局模式有点类似于ImGUI,不过它仅仅只是外观像,本质还是QWidget。
为啥总是有人认为好看的界面是"做"出来的....
好看的界面是"设计"出来的!
花钱请个美工, 给你设计个漂亮的界面.
比啥都强.
1.效果展示


?2.用法展示
我已经将绘制接口独立出来,如果你想要绘制自己的特色,只需要继承BaseTabBarDrawHelper实现里面的接口,再调用QTabWidgetProxy::updateDrawHelp()函数,传递自定义的class。
这里还存在个问题就是多次调用QTabWidgetProxy::updateDrawHelp()有内存泄漏的风险。所以这个bug,已经解决了方案我准备将项目升级到vs2019使用智能指针管理内存。

 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent), ui(new Ui::MainWindow) {
   ui->setupUi(this);
   setupUI();
 }
 ?
 MainWindow::~MainWindow() {
   delete ui;
   delete frame_less_helper_;
 }
 ?
 void MainWindow::setupUI() {
   this->setWindowFlags(Qt::FramelessWindowHint |
                        Qt::X11BypassWindowManagerHint);
   frame_less_helper_ = new NcFramelessHelper();
   frame_less_helper_->activateOn(this);
   frame_less_helper_->setFilterEventCallBack(
       std::bind(&TabWidgetProxy::filterTabBarEvent, ui->tabWidgetProxy,
                 std::placeholders::_1, std::placeholders::_2));
   frame_less_helper_->activeOnWithChildWidget(this,
                                               ui->tabWidgetProxy->tabBar());
 ?
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(tabInserted(int)), this,
           SLOT(OnTabInserted(int)));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(addBtnClicked()), this,
           SLOT(OnAddBtnClicked()));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(tabClosed(int)), this,
           SLOT(OnCloseTab(int)));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(closeWnd()), this,
           SLOT(OnCloseWnd()));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(minWnd()), this,
           SLOT(OnMinWnd()));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(maxWnd()), this,
           SLOT(OnMaxWnd()));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(restoreWnd()), this,
           SLOT(OnRestoreWnd()));
   connect(&(ui->tabWidgetProxy->getSignal()), SIGNAL(tabBarDoubleClicked()),
           this, SLOT(OnMaxOrRestore()));
 ?
   ui->tabWidgetProxy->updateDrawHelp(new TabBarDrawHelper());
 ?
 #ifdef _DEBUG
   QWidget *widget = new QWidget();
   widget->setStyleSheet("background-color:#FF00FF00");
   ui->tabWidgetProxy->addTab2(widget, tr("this is first tab tab tab tab tab"));
 #endif  //_DEBUG
 ?
 }
 ?
 void MainWindow::OnTabInserted(int index) {
   QPushButton *button = new QPushButton();
   button->setStyleSheet(
       "QPushButton{border-image: url(:/images/close.png)}"
       "QPushButton:hover{border-image: url(:/images/close_hover.png)}");
   ui->tabWidgetProxy->setTabButton2(index, QTabBar::RightSide, button);
   ui->tabWidgetProxy->setTabIcon(index, QIcon(":/images/x-capture-options.png"));
 }
 ?
 void MainWindow::OnCloseTab(int index) {
   // todo something
 }
 ?
 void MainWindow::OnAddBtnClicked() {
   QWidget *widget = new QWidget();
   widget->setStyleSheet("background-color:#FFFFFF00");
   ui->tabWidgetProxy->addTab2(widget, tr("this is first tab"));
 }
 ?
 void MainWindow::OnCloseWnd() { this->close(); }
 ?
 void MainWindow::OnMinWnd() {}
 ?
 void MainWindow::OnMaxWnd() {}
 ?
 void MainWindow::OnRestoreWnd() {}
 ?
 void MainWindow::OnMaxOrRestore() {}
 ?
 // 下面是具体的绘制过程
 #include <QFont>
 #include "draw_helper.h"
 #include "round_shadow_helper.h"
 #include "tab_bar_draw_helper.h"
 ?
 TabBarDrawHelper::TabBarDrawHelper() {
   tab_bar_bk_image_.load(":/images/default_100_precent/caption_bg.png");
   tab_bk_normal_image_.load(":/images/default_100_precent/tab.png");
   tab_bk_hover_image_.load(":/images/default_100_precent/tab_hover.png");
   tab_bk_selected_image_.load(":/images/default_100_precent/tab_check.png");
 ?
   left_arrow_pixmap_list_.push_back(
       QPixmap(":/images/default_100_precent/left_arrow_normal.png"));
   left_arrow_pixmap_list_.push_back(
       QPixmap(":/images/default_100_precent/left_arrow_disabled.png"));
 ?
   right_arrow_pixmap_list_.push_back(
       QPixmap(":/images/default_100_precent/right_arrow_normal.png"));
   right_arrow_pixmap_list_.push_back(
       QPixmap(":/images/default_100_precent/right_arrow_disabled.png"));
 }
 ?
 TabBarDrawHelper::~TabBarDrawHelper() {}
 ?
 void TabBarDrawHelper::paintTabAddBtn(QPainter &painter, const QRect &rect,
                                       TabState tab_state) {
   QColor color = (TabState::hover_ == tab_state) ? QColor(255, 255, 255, 50)
                                                  : Qt::transparent;
   painter.save();
   QRect draw_rect = QRect(QPoint(0, 0), QSize(20, 20));
   draw_rect.moveCenter(rect.center());
   DrawCircle::Draw(&painter, draw_rect, color);
   DrawCharacter::DrawPlus(&painter, draw_rect, Qt::white);
   painter.restore();
 }
 ?
 void TabBarDrawHelper::paintTab(QPainter &painter, const QRect &draw_rect,
                                 TabState tab_state, const QString &text,
                                 const QIcon &icon) {
   painter.save();
   painter.setPen(Qt::NoPen);
   painter.setRenderHint(QPainter::SmoothPixmapTransform);
   if (TabState::selected_ == tab_state) {
     if (!tab_bk_selected_image_.isNull())
       painter.drawPixmap(draw_rect, tab_bk_selected_image_);
   } else if (TabState::hover_ == tab_state) {
     if (!tab_bk_hover_image_.isNull())
       painter.drawPixmap(draw_rect, tab_bk_hover_image_);
   } else if (TabState::normal_ == tab_state) {
     if (!tab_bk_normal_image_.isNull())
       painter.drawPixmap(draw_rect, tab_bk_normal_image_);
   }
   QRect real_rect = draw_rect;
   real_rect -= QMargins(35, 0, 30, 0);
   painter.setPen(Qt::white);
   QString draw_text =
       painter.fontMetrics().elidedText(text, Qt::ElideRight, real_rect.width(), 0);
   painter.drawText(real_rect, Qt::AlignLeft | Qt::AlignVCenter, draw_text);
   painter.restore();
   // draw tab icon
   if (!icon.isNull()) {
     painter.save();
     painter.setPen(Qt::NoPen);
     QList<QSize> actual_size = icon.availableSizes();
     QSize icon_size = actual_size[0];
     QPoint icon_point = QPoint(draw_rect.left() + 5,
                                (draw_rect.height() - icon_size.height()) / 2);
     QRect icon_rect(icon_point, icon_size);
     painter.drawPixmap(icon_rect, icon.pixmap(icon_size));
     painter.restore();
   }
 }
 ?
 void TabBarDrawHelper::paintTabBar(QPainter &painter, const QRect &rect) {
   if (tab_bar_bk_image_.isNull()) return;
   painter.save();
   painter.drawPixmap(rect, tab_bar_bk_image_);
   painter.restore();
 }
 ?
 void TabBarDrawHelper::paintScrollBtn(bool left, QPainter &painter,
                                       const QRect &rect,
                                       const QToolButton *tool_btn) {
   QBrush rect_brush = Qt::transparent;
   if (tool_btn->underMouse()) {
     rect_brush = QColor(214, 214, 214, 100);
   }
 ?
   QRect draw_rect = QRect(0, 0, 20, 20);
   draw_rect.moveCenter(rect.center());
   RoundShadowHelper round_helper;
   round_helper.FillRoundShadow(&painter, draw_rect, rect_brush.color(), 4);
 ?
   draw_rect = QRect(0, 0, 16, 16);
   draw_rect.moveCenter(rect.center());
   painter.save();
   if (!tool_btn->isEnabled()) {
     // disabled
     painter.drawPixmap(draw_rect, left ? left_arrow_pixmap_list_[1]
                                        : right_arrow_pixmap_list_[1]);
   } else {
     // normal
     painter.drawPixmap(draw_rect, left ? left_arrow_pixmap_list_[0]
                                        : right_arrow_pixmap_list_[0]);
   }
 ?
   painter.restore();
 }
 ?
 QRect TabBarDrawHelper::calcIconBtnRect(bool left_button,
                                         const QSize &icon_size,
                                         const QRect &btn_rect) {
   QPoint center_pos = QPoint(0, 0);
   QRect button_rect = QRect(0, 0, 0, 0);
   const int icon_padding = 8;
   if (left_button) {
     center_pos =
         QPoint(icon_padding + icon_size.width() / 2 + btn_rect.x(),
                btn_rect.y() + (btn_rect.height() - icon_size.height()) / 2 +
                    icon_size.height() / 2);
   } else {
     center_pos = QPoint(
         btn_rect.x() + btn_rect.width() - icon_padding - icon_size.width() / 2,
         btn_rect.y() + (btn_rect.height() - icon_size.height()) / 2 +
             icon_size.height() / 2);
   }
   button_rect = QRect(QPoint(0, 0), icon_size);
   button_rect.moveCenter(center_pos);
   return button_rect;
 }

?3.特性配置
增加无边框窗口功能(缩放,移动)增加tab贴图功能双击关闭tab可以设置是否需要绘制“+”按钮。支持tab拖拽,合并将绘制接口导出来,方便用户自定义绘制和贴图
?4.总结
没写之前觉得是个小功能,真正写的过程中,也是遇到了很多奇奇怪怪的问题,也是阅读了Qt源码才解决了问题。还是自己动手才知道其中的难点。
虽然很早就写得差不多了,一直在重构。但是总觉得还有很多地方没有处理好。
比如:
上面的提到的TabBarDrawHelper内存管理一直在裸奔。整体结构并没有画出来,准备后续的文档在整理了。真正用到项目中估计还有其他问题,还需要在整理。...
这大概就是有点完美强迫症吧,但是这复工没多久实在是太忙了,所以就先这样吧,实在是干不动了,-。
最好还是要谢谢这位同学,项目里面用到的拖拽和合并的功能完全参考这位同学的。地址:https://github.com/iwxyi/Qt-DragableTabWidget
地址:https://github.com/MingYueRuYa/QtExtTabWidget
【基于Qt的汽车仪表模拟 3.0-哔哩哔哩】 https://b23.tv/y9TjoUf
可以看看这个,用的qt 5 widget 写的
1。有设计师,让设计师设计出好看的。
2。没设计师,照抄成熟知名大厂软件的界面,比如Office、PhotoShop等。
3。框架差别不大,但在QWidget框架下,QSS是必选。
找一个现成的QSS,动态载入,一边改QSS,一边载入看效果,下面这三套是自己改出来的


运行时更换QSS


Photoshop Dark


Light


Steam Dark
现在前端界面开发以WEB的低代码、零代码为趋势了,比如百度的AMIS,能配置JSON开发中后台系统,还有新开源的UIOTOS,支持嵌套和连线来开发界面。分别介绍如下:
UIOTOS
前端零代码工具,主打IoT应用开发,一站式支持WEB中后台管理,以及上位机、组态HMI。面向的用户正好是后端、嵌入式、工控、产品、实施等人员,可以没有任何前端开发基础,通过独创的页面嵌套和连线就能做,比较新颖,程序员和非程序员都玩转。


UIOTOS编辑界面


UIOTOS内置示例


UIOTOS项目案例-运营商智慧园区一体化管理平台


UIOTOS页面嵌套特性-无限套娃


UIOTOS页面嵌套-模块化


UIOTOS页面嵌套和逻辑连线。
项目地址:https://gitee.com/uiotos/uiotos-community
AMIS
前端低代码框架。是百度开源的一款前端低代码框架,通过 JSON 配置就能生成各种后台页面,包括数据获取、表单提交及验证等功能,同时,Amis内置 100+ 种 UI 组件,能够满足各种页面组件展现的需求,极大减少开发成本,甚至可以不需要了解前端。
amis 在百度内部得到了广泛使用,在 4 年多的时间里创建了 3w 多页面,从内容审核到机器管理,从数据分析到模型训练,amis 满足了各种各样的页面需求。我们可以下载源码,然后使用如下的命令来体验。


项目链接:GitHub - baidu/amis: 前端低代码框架,通过 JSON 配置就能生成各种页面。
说说你的目标吧。
1、好看的界面
界面是否好看,取决于布局、颜色、字体等的统一配合。一般的手段是布局上需要有条理,颜色上要尽量避免跨色差过大,一般同一界面尽量采用低于三种色彩,而且色彩要尽量采用同色系,对字体的要求一般是清晰、字号适中但有突出。布局的有条理决定着程序的易用性,色彩的统一会让界面给人以和谐感,布局和颜色配合得当很容易做出流行的简洁风格。
2、用Qt Widget做界面
其实各种界面框架基本大差不差,差别主要是在能力的重点分部不一致,以及框架实现和应用编写时的复杂程度高低。用Qt也一样能做到WPF其他框架的精美程度。
3、个人实现方式
我用Qt Widget做过的东西不多,但在工作中也确实开发过正式应用。实现方式用的是窗体自定义+QSS手动加载的方式,具体来讲就是通过设定整体风格,用QWidget自定义了无边框主窗体,在每个窗体中通过加载QSS文件的方式加载定制化样式。就我的实践而言,确实比诸如WPF之类框架在开发上稍微麻烦一些,但还好!
QML是你的不二选择,我曾经是QWidget的坚定拥护者,自从用了QML之后,唉呀真香。
最近在使用Qt5,Qt Creator做一个管理系统类的项目,自然需要用到登录界面,故记录一下登录界面的制作。其中一些功能的实现也得益于之前Qt5基础视频不规则窗口部分的学习。
一、手把手教你实现漂亮的登录界面
首先看一下成品。


第一步、新建一个Qwidget项目
没必要用qmainwindow,不需要那些菜单,一般用qwidget就可以,注意勾选ui。


第二步、添加界面组件1、添加容器


调整容器为合适大小,同时调整整个画布为合适大小。


2、添加按钮,标签,文字组件
构思:
账号密码部分使用Input Widgets:Line Edit
Logo和忘记密码使用两个Display Widgets:TextLabel
是否记住我选择一个Buttons:CheckBox
登录按钮使用Buttons:PushButton


3、修改组件名称
首先修改Line Edit默认文本属性,分别点击两个LineEdit修改文本属性为Username和Password。


然后其他的按钮文本标签直接双击修改名称即可。


以上两步之后,可以得到这个样子(这里统一在Wighets右边的菜单里修改过字体,一会可以通过样式表统一去改)。


4、添加样式表
类似于css,Qt具有Qss,最为关键的一步就是添加样式表。在Frame容器外 画布内 右键改变样式表,输入以下代码。

*{
background:rgb(255, 255, 255);
font-size:15px;
font-style:MingLiU-ExtB;
}
QFrame{
border:sold 10px rgba(0,0,0);
background-image:url(H:/GUI_design/day04/image/Login_Blue5);//背景
}
QLineEdit{
color:#8d98a1;
background-color:#405361;
font-size:16px;
border-style:outset;
border-radius:10px;
font-style:MingLiU-ExtB;
}
QPushButton{
background:#ced1d8;
border-style:outset;
border-radius:10px;
font-style:MingLiU-ExtB;
}
QPushButton:pressed{
background-color:rgb(224,0,0);
border-style:inset;
font-style:MingLiU-ExtB;
}
QCheckBox{
background:rgba(85,170,255,0);
color:white;
font-style:MingLiU-ExtB;
}
QLabel{
background:rgba(85,170,255,0);
color:white;
font-style:MingLiU-ExtB;
font-size:14px;
}

背景部分找百度就可以。


应用样式表后展示。


第三步、实现最小化窗口和关闭窗口功能1、添加最小化和关闭窗口按钮
按钮选择Buttons:Tool Button,最小化采用-,关闭窗口采用x。


2、按钮转到槽
将两个按钮都转到槽。


3、代码示例
转到槽之后,只需要在相应的函数里添加close()和showMinimized()功能即可。具体的代码如下。
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_toolButton_clicked();

    void on_toolButton_2_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

//核心代码就这几行
void Widget::on_toolButton_clicked()
{
    close();
}

void Widget::on_toolButton_2_clicked()
{
    showMinimized();
}

调整画布到合适大小


展示如下:


这个时候我们还需要把Widget自带的上边框去掉,并且去掉背景。
第四步、隐藏widget窗口边框和背景
widget.cpp文件中添加如下两句代码即可。

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //去窗口边框
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());

    //把窗口背景设置为透明;
        setAttribute(Qt::WA_TranslucentBackground);
}

第五步、实现界面可移动
需要添加一个鼠标移动和鼠标按下事件。以*e来获取鼠标移动或按下。
main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:

    void mouseMoveEvent(QMouseEvent *e);//鼠标移动
    void mousePressEvent(QMouseEvent *e);//鼠标按下移动

private slots:
    void on_close_clicked();

    void on_minimized_clicked();


private:
    Ui::Widget *ui;

     QPoint p;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QMouseEvent>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //去窗口边框
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());

    //把窗口背景设置为透明;
        setAttribute(Qt::WA_TranslucentBackground);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        //求坐标差值
        //当前点击坐标-窗口左上角坐标
        p = e->globalPos() - this->frameGeometry().topLeft();
    }
}

void Widget::mouseMoveEvent(QMouseEvent *e)
{
    if(e->buttons() & Qt::LeftButton)
    {
        //移到左上角
        move(e->globalPos() - p);
    }

}

void Widget::on_close_clicked()
{
    close();
}
void Widget::on_minimized_clicked()
{
    showMinimized();
}

资源&更深入的阅读资料:领取资料的神秘通道开启点击链接加入群聊【C语言/C++编程学习基地】:828339809
下面这个帖子不知道是不是你想了解的QT界面美化的例子:QT QSS + QML。
bird:QT界面美化效果截图QSS+QML


QT Widgets + QSS界面美化
界面好不好看是取决于你有没有一个好的设计帮你弄,而不是靠你自己捣鼓那些自带样式
一直纳闷一件事情,知乎上好多问题,都说qtWidget写不出好界面
你给我一张UI和UI切片,我给你用qWidget写出来,动效也按你要求加上不就完事了?
照着大网站,抄,,,,github好看,直接抄
你这个问题就有点奇怪。
UI 好不好看,那是美工的设计所决定的事情,关程序员什么事?
你想问的或许是:
“如何用 QT 制作复杂 UI”
“如何提高自己的平面设计能力”
“如何提高自己的美术设计能力”
qwebkit,想多好看有多好看!
以前复杂页面我就这样搞
[收藏本文] 【下载本文】
   明星艺术 最新文章
如何看待明英宗朱祁镇杀了于谦这件事?
王玥波评书有什么过人之处?只有他是唯一能
你有哪些珍贵的老照片?
妆造被指抄袭,《国色芳华》致歉「在参考中
如何使用 QtWidget 写出好看的界面?
有哪些外行觉得丑但其实很厉害的画?
为什么古代中国没有像古希腊那样高度写实主
如何评价赵本山的演技?
世界上第一个直角是怎么画出来的?
都在赞张译的表演,为啥我觉得他演的很假呢
上一篇文章      下一篇文章      查看所有文章
加:2025-01-13 21:07:09  更:2025-01-13 21:09:47 
 
古典名著 名著精选 外国名著 儿童童话 武侠小说 名人传记 学习励志 诗词散文 经典故事 其它杂谈
小说文学 恐怖推理 感情生活 瓶邪 原创小说 小说 故事 鬼故事 微小说 文学 耽美 师生 内向 成功 潇湘溪苑
旧巷笙歌 花千骨 剑来 万相之王 深空彼岸 浅浅寂寞 yy小说吧 穿越小说 校园小说 武侠小说 言情小说 玄幻小说 经典语录 三国演义 西游记 红楼梦 水浒传 古诗 易经 后宫 鼠猫 美文 坏蛋 对联 读后感 文字吧 武动乾坤 遮天 凡人修仙传 吞噬星空 盗墓笔记 斗破苍穹 绝世唐门 龙王传说 诛仙 庶女有毒 哈利波特 雪中悍刀行 知否知否应是绿肥红瘦 极品家丁 龙族 玄界之门 莽荒纪 全职高手 心理罪 校花的贴身高手 美人为馅 三体 我欲封天 少年王
旧巷笙歌 花千骨 剑来 万相之王 深空彼岸 天阿降临 重生唐三 最强狂兵 邻家天使大人把我变成废人这事 顶级弃少 大奉打更人 剑道第一仙 一剑独尊 剑仙在此 渡劫之王 第九特区 不败战神 星门 圣墟
  网站联系: qq:121756557 email:121756557@qq.com