精华内容
下载资源
问答
  • 使用QtUI设计开发的串口助手源码文件
  • Qt UI设计之《可缩放固定比例窗口》

    千次阅读 2020-11-06 15:13:31
    该窗口有两个窗口控件,内部控件按照自的名义比例伸缩 1 主窗口相关代码 #pragma once #include <QWidget> class uimainwnd : public QWidget { Q_OBJECT ... uimainwnd(QWidget *parent = Q_NULLPTR);...
    该窗口有两个窗口控件,内部控件按照自定义比例伸缩在这里插入图片描述
    1 主窗口相关代码
    #pragma once
    #include <QWidget>
    
    class uimainwnd : public QWidget
    {
    	Q_OBJECT
    
    public:
    	uimainwnd(QWidget *parent = Q_NULLPTR);
    	~uimainwnd();
    
    protected:
    	void resizeEvent(QResizeEvent* event) override;
    
    private:
    	void initUI();
    	QHBoxLayout *m_hbLayoutMain;	
    };
    
    #include "stdafx.h"
    #include "uimainwnd.h"
    #include "uititlebar.h"
    #include "uicontentwnd.h"
    
    static inline void GetScaleAndCenterPos(int baseCX, int baseCY, int windowCX,
    	int windowCY, int& x, int& y,
    	float& scale)
    {
    	double windowAspect, baseAspect;
    	int newCX, newCY;
    
    	windowAspect = double(windowCX) / double(windowCY);
    	baseAspect = double(baseCX) / double(baseCY);
    
    	if (windowAspect > baseAspect) {
    		scale = float(windowCY) / float(baseCY);
    		newCX = int(double(windowCY) * baseAspect);
    		newCY = windowCY;
    	}
    	else {
    		scale = float(windowCX) / float(baseCX);
    		newCX = windowCX;
    		newCY = int(float(windowCX) / baseAspect);
    	}
    
    	x = windowCX / 2 - newCX / 2;
    	y = windowCY / 2 - newCY / 2;
    }
    
    static inline void GetCenterPosFromFixedScale(int baseCX, int baseCY,
    	int windowCX, int windowCY,
    	int& x, int& y, float scale)
    {
    	x = (float(windowCX) - float(baseCX) * scale) / 2.0f;
    	y = (float(windowCY) - float(baseCY) * scale) / 2.0f;
    }
    
    static inline QSize GetPixelSize(QWidget* widget)
    {
    #ifdef SUPPORTS_FRACTIONAL_SCALING
    	return widget->size() * widget->devicePixelRatioF();
    #else
    	return widget->size() * widget->devicePixelRatio();
    #endif
    }
    
    uimainwnd::uimainwnd(QWidget *parent)
    	: QWidget(parent)
    {
    	this->setAutoFillBackground(true); // 自动刷新背景
    	QPalette palette(this->palette());
    	palette.setColor(QPalette::Background, RGB(76, 76, 76));
    	this->setPalette(palette);
    	initUI();
    }
    
    uimainwnd::~uimainwnd()
    {
    }
    
    void uimainwnd::initUI()
    {
    	setWindowTitle("固定比例窗口");
    	resize(650, 350);
    
    	m_hbLayoutMain = new QHBoxLayout(this);
    
    	uicontentwnd* _uicontentwnd = new uicontentwnd(this);
    	m_hbLayoutMain->addWidget(_uicontentwnd);
    	m_hbLayoutMain->setContentsMargins(0, 0, 0, 0);
    	setLayout(m_hbLayoutMain);
    }
    
    void uimainwnd::resizeEvent(QResizeEvent* event)
    {
    	QSize  targetSize;
    	targetSize = GetPixelSize(this);
    
    	int x;
    	int y;
    	float scale;
    
    	GetScaleAndCenterPos(
    		4, // 宽高比
    		3, // 宽高比
    		targetSize.width(),
    		targetSize.height(),
    		x,
    		y,
    		scale);
    
    	m_hbLayoutMain->setContentsMargins(x, y, x, y);
    }
    
    2 内部窗口控件相关代码
    #pragma once
    #include <QWidget>
    
    class uicontentwnd : public QWidget
    {
    	Q_OBJECT
    public:
    	uicontentwnd(QWidget *parent = Q_NULLPTR);
    	~uicontentwnd();
    };
    
    
    #include "stdafx.h"
    #include "uicontentwnd.h"
    
    uicontentwnd::uicontentwnd(QWidget *parent)
    	: QWidget(parent)
    {
    	this->setAutoFillBackground(true); // 自动刷新背景
    	QPalette palette(this->palette());
    	palette.setColor(QPalette::Background, RGB(238, 238, 238));
    	this->setPalette(palette);
    }
    
    uicontentwnd::~uicontentwnd()
    {
    }
    
    展开全文
  • QtUI设计:设置控件透明

    千次阅读 2016-05-27 11:07:39
    QT设置按钮控件透明:  代码: //设置按钮 背景 前景 this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(100,100,100,100)")); // 第一个 为前景色;第二个 ...

    QT设置按钮控件透明:

            代码:

        //设置按钮 背景 前景
        this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(100,100,100,100)"));
        // 第一个 为前景色;第二个 为北京色; 透明度 为a
        this->ui->ShowPcdFile->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(100,100,100,100)"));
        this->ui->QwtPlotDraw->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(0,0,0,0)"));
    
        this->ui->Train->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(100,100,100,100)"));
        this->ui->Classify->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(100,100,100,100)"));
        this->ui->Abnormal->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(100,100,100,100)"));



    展开全文
  • qt ui设计界面 创建信号与槽 原理,

    万次阅读 2016-09-04 13:29:11
    ui设计界面,设计信号和槽时,会把信息存在ui文件中,在编译时会在成成的头文件**.h 中把连接代码加上。 ui界面添加信号和槽有两种方法 第一种: 在界面选择操作对象-》右键-》转到槽-》选择信号-》qtCreator ...

    在ui设计界面,设计信号和槽时,会把信息存在ui文件中,在编译时会在成成的头文件**.h 中把连接代码加上。

    ui界面添加信号和槽有两种方法

    第一种: 在界面选择操作对象-》右键-》转到槽-》选择信号-》qtCreator 自动生成 槽方法-》编写槽方法。此方法在ui文件中并不会保存响应信号与槽信息,因为它生成的槽格式固定,如on_countBtn_clicked。在编译时加入QMetaObject::connectSlotsByName(MainWindow);方法就可以自动按照 方法名 映射为相应的connect。

    第二种 :在编辑界面下方


    此方法会在ui文件中生成 相应的connect 信息,在编译时,会在**.h头文件中加入

     connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(showArea()));方法。
     
    
     
    
     
    
    以下为第一种方法原理说明

    查看Qt5的一些示例项目的时候,使用设计器打开其UI文件,在文件中竟然找不到signal和slot的连接。但是最终的程序,slot却又能准确的响应信号。打开通过ui文件自动生成的c++文件,其中也找不到connect语句,到底是怎么一回事?

      
      经过逐语句的分析。终于发现连接的原因就在于setUi函数的最后一句
      
      QMetaObject::connectSlotsByName(MainWindow);


      
       找到该静态函数
      
      
    void QMetaObject::connectSlotsByName(QObject *o)
      {
       if (!o)
       return;
       const QMetaObject *mo = o->metaObject();
       Q_ASSERT(mo);
       const QObjectList list = qFindChildren(o, QString());
       for (int i = 0; i < mo->methodCount(); ++i) {
      
      
       const char *slot = mo->method(i).signature();
       Q_ASSERT(slot);
      
      //以下一行用来判断slot的前三位是否是on_,如果不是,就跳过这个方法。
       if (slot[0] != 'o' || slot[1] != 'n' || slot[2] != '_')
       continue;
       bool foundIt = false;
      
      //遍历子对象。
       for(int j = 0; j < list.count(); ++j) {
       const QObject *co = list.at(j);
      
      //得到子对象名。
       QByteArray objName = co->objectName().toAscii();
       int len = objName.length();
      
      //要求slot跳过前3位(on_)后,接下来的子字符串和子对象名相同,并且接着该子字符串又是一个_
      
      //如果达不到这个要求,continue
       if (!len || qstrncmp(slot + 3, objName.data(), len) || slot[len+3] != '_')
       continue;
       const QMetaObject *smo = co->metaObject();
       int sigIndex = smo->indexOfMethod(slot + len + 4);
       if (sigIndex < 0) { // search for compatible signals
       int slotlen = qstrlen(slot + len + 4) - 1;
      
      //搜索该子对象所能引发的信号
       for (int k = 0; k < co->metaObject()->methodCount(); ++k) {
      //方法类型如果符合要求
      
       if (smo->method(k).methodType() != QMetaMethod::Signal)
       continue;
      
      //如果slot最后的子字符串和信号名相同
      
       if (!qstrncmp(smo->method(k).signature(), slot + len + 4, slotlen)) {
       sigIndex = k;
       break;
       }
       }
       }
       if (sigIndex < 0)
       continue;
      
      //连接操作
       if (QMetaObject::connect(co, sigIndex, o, i)) {
       foundIt = true;
       break;
       }
       }
      
      //连接成功
       if (foundIt) {
       // we found our slot, now skip all overloads
       while (mo->method(i + 1).attributes() & QMetaMethod::Cloned)
       ++i;
       }
      
      //连接失败
      
      else if (!(mo->method(i).attributes() & QMetaMethod::Cloned)) {
       qWarning("QMetaObject::connectSlotsByName: No matching signal for %s", slot);
       }
       }
      }


      
       得出此结论:自动生成的文件中,该函数总会存在setUi函数的最后一句。
      
      该函数的作用就是寻找setUi的唯一指针参数MainWindow所指向对象的成员函数,

      
      该成员函数的名字如果满足以下条件,就做连接操作。
      
      函数名规则:on_子对象名_信号名
      
      函数签名(即返回值与参数要符合slot要求)
      
      所以,我们可以这样做:在qt设计器中添加按纽或者菜单项或者按纽项后,不用在设计器中手动做连接操作。
      
      我们只要在主窗口类中添加符合条件的成员函数即可。
      
      函数名规则:on_子对象名_信号名
      
      函数签名(即返回值与参数要符合slot要求)
      
      例如:
      
      在设计器中添加一个菜单项,其对应的action为actionNew
      
      那么在主窗口类中添加以下的函数
      
      public slots:
      
       void on_actionNew_triggered();
      
      当切换这个菜单时,会自动执行上面的成员函数。
    展开全文
  • QT ui设计界面布局无法设置的问题

    千次阅读 2019-10-30 11:02:58
    widget无法设置布局,原因widget内部必须有子部件,否则直接设置的为顶层布局。如图1、2

    widget无法设置布局,原因widget内部必须有子部件,否则直接设置的为顶层布局。如图1、2

    展开全文
  • 窗口使用系统提供伸缩、自定义标题栏和可移动可以看另一篇文章 Qt UI设计之《自定义标题栏可移动拖拽窗口》 窗口分为两个控件:主窗口QWidget,标题栏QWidget 1 标题栏相关代码 #pragma once #include class ...
  • #pragma once #include <QWidget> class uititlebar : public QWidget { Q_OBJECT public: uititlebar(QWidget *parent = Q_NULLPTR);... virtual void mousePressEvent(QMouseEvent* event) override;...
  • QWidget* p=QPushButton::find( ui->Btn_0->winId... 这样就可以在ui设计器上找到名字为Btn_1的QPushButton了  等价于下面这个式子:  QPushButton *db = ui->centralWidget->findChild*>("Btn_1");
  • qt ui界面设计

    千次阅读 2018-04-09 09:15:49
    新建Mainwindow类型的项目,点击ui界面设计,就可以不用编写代码直接设计界面.如何用代码操作ui上的控件,使用ui-&gt;button类型方式,可以操作.mainwindow是属于带菜单栏的文件类型.在进行菜单栏的编辑时,可以直接...
  • QtUI一二三

    千次阅读 2017-01-19 21:57:33
    大多数人使用Qt并不使用Qt的UI,因为有一部分人是使用VS编写Qt,还有一部分人,认为UI设计太过复杂,不如手写来的酸爽,但对于像我这种Qt初学者来说手写太难,不得不先画UI来完成初期的学习。 以下是我个人对QtUI的...
  • Qt ui界面设计

    千次阅读 2013-06-02 20:45:45
    //calcu.h #ifndef CALCU_H #define CALCU_H #include ...namespace Ui { class calcu; } class calcu : public QMainWindow { Q_OBJECT public: explicit calcu(QWidget *parent = 0)
  • Qt 工业控制UI设计

    热门讨论 2011-09-17 22:55:33
    QT 制作的工业控制程序,只完成了界面部分的设计。因为某种原因没能继续做完,分享给大家学习一下。
  • QT5设计VTK UI窗口

    千次阅读 2015-10-10 10:02:01
    将VTK作为程序主窗口的方法有很多,现在就介绍一种最便捷的方法,利用Qt设计师制作Ui并加入项目。1、新建一个空的Qt项目如下图,后面默认即可。 2、打开Qt设计师创建一个主窗口并将QVTKWidget部件拖入主窗口中,对...
  • qtui设计时无法输入中文

    千次阅读 2018-03-29 17:04:18
    1.软件环境: 版本:5.6.1 操作系统:win10家庭版64位 MSVC版本:2013(32bit)2.问题描述:qtui设计时无法输入中文 3.解决办法:这个是bug,在TXT中写好粘贴复制上去即可...
  • qt ui界面控件含义,布局设计

    千次阅读 2019-08-19 11:16:29
    1、布局控件简介: 水平布局,里面的控件将水平展示,布局器里面的控件大小若没有固定,其大小将随着布局的大小而自动拉伸。可以通过设置其左(layoutLeftMargin)、上(layoutTopMargin)、右...在Qt ...
  • Qtui设计中拖的控件界面,编译运行后无法显示问题
  • QT UI文件生成头文件

    千次阅读 2017-08-01 22:16:48
    1,将设计UI文件拷贝到uic.exe的目录下Qt\Qt5.3.2\5.3\mingw482_32\bin. 2, 打开windows的CMD,进入到UIC的目录下:cd C:\Qt\Qt5.3.2\5.3\mingw482_32\bin 3, 执行如下命令:uic mainwindow.ui -o
  • Pyside2配合qt Designer 设计UI子窗口Pyside2配合qt Designer 设计UI子窗口 Pyside2配合qt Designer 设计UI子窗口 子窗口的设计大部分都是代码实现的 但是我等小白对代码实在是不慎精通,命令行控制python用了很久也...
  • QT解决UI设计器显示和运行显示不一致问题 在主程序中加上这段代码 if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling,true);
  • Qt5 UI界面设计

    2020-06-07 23:01:39
    新建Qt项目 拖控件,跟MFC相似直接拖拽即可 头文件与cpp文件 mainwindow.cpp mainwindow.h 构造函数与析构函数 .pro文件 加载Qt文件选择.pro文件 水平布局与垂直布局 将控件拖入到...
  • QT UI文件解析

    千次阅读 2011-07-09 15:24:43
    在学习QT的时候,曾有这样的疑问,我们新建一个项目,比如继承自QWidget,在设计界面的时候,使用ui设计,但是在代码部分只出现XML格式的代码,却没有我们熟悉的.h格式,那这些控件、布局仅仅是通过XML文件来控制的么...
  • Qt:可视化UI设计

    万次阅读 2018-08-10 14:17:09
    1、创建项目&...在界面设计时,对需要访问的组件修改其objectName,比如各个按钮,需要读取输入的编辑框,需要显示结果的标签等,以便在程序里区分。对于不需要程序访问的组件则无需修改其 obj...
  • 五子棋有音效基于vs使用C语言有良好界面图像音效齐全qt进行ui设计 包含人机对战和玩家对战
  • Qt5.9.1 简单字体设计(UI设计

    千次阅读 2019-01-30 16:52:20
    最近自学了下Qt,本节讲一下如何进行些简单的字体设计,有什么问题互相交流。 步骤如下: 一:创建一个Widget Application项目samp1,在创建窗体时选择基类QDialog,生成的类命名为QWDialog,并选择生成窗体。 二:...
  • Qt for Android UI设计

    千次阅读 2017-04-22 23:55:16
    1.UI设计的界面在真机上测试时,没有图片 2.整体图片都在左上角 而不是填充整个屏幕 3.Qlabel没有事件点击功能,触发需要升级 4.图片适应屏幕后,却变形 5.在frame上添加其他控件,控件会显示frame的背景图片 解决...
  • QT入门之UI设计界面

    千次阅读 2017-11-06 22:11:07
    UI设计界面中,可以观察到属性编辑器实际上就是对派生类的各个成员数据进行赋值。因为QLineEdit继承自QWidget,QWidget又继承自QObject,所以可以看出属性编辑器其实就是分别对派生类对象中的各个基类子对象部分...
  • QtDesigner设计 UI 文件并调用是本篇内容将要介绍的内容,不多说,先来看内容。 1、用designer设计一个UI.对象名保存为myui,基于QWidget类.(可以在此基础上随便添加一些控件之类。eg:pushButton)。保存窗体为myui,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,499
精华内容 9,399
关键字:

qtui如何设计