`

QT Designer

 
阅读更多
(一)简单继承方式的实现
1、QT Designer 设计用户界面;
2、设计一个类继承设计的用户界面;
3、在程序中使用这个类。


以一个sample为例,ui文件为calculatorform.ui

/** @brief 自定义类的头文件calculatorform.h */
#ifndef CALCULATORFORM_H
#define CALCULATORFORM_H

#include "ui_calculatorform.h" //由ui文件生成的头文件

class CalculatorForm : public QWidget //自定义一个类CalculatorForm
    {
        Q_OBJECT

    public:
        CalculatorForm(QWidget *parent = 0);

    private slots: //      信号/槽的自动连接方式
        void on_inputSpinBox1_valueChanged(int value);
        void on_inputSpinBox2_valueChanged(int value);

    private:
        Ui::CalculatorForm ui; //Ui::CalculatorForm是ui设计时窗体的objectname。
                                        //这里与自定义类名相同,这不是必须的。 
                                        //Ui为ui文件生成头文件时使用的namespace
    };

#endif

/** @brief 自定义类的实现 calculatorform.cpp*/
#include <QtGui>

#include "calculatorform.h"

CalculatorForm::CalculatorForm(QWidget *parent)
        : QWidget(parent)
    {
        ui.setupUi(this); //重要的一步
    }

    void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
    {
        ui.outputWidget->setText(QString::number(value + ui.inputSpinBox2->value()));
    }

    void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
    {
        ui.outputWidget->setText(QString::number(value + ui.inputSpinBox1->value()));
    }
/** @brief 程序中的使用 main.cpp */
#include <QApplication>

#include "calculatorform.h" //包含自定义类的头文件

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   CalculatorForm calculator; //构造一个自定义类
   calculator.show();
   return app.exec();
}

至此,简单继承这种方式就很清楚了。估计这种方式也是使用比较多的一种方式。

二)QT Designer有多种编辑模式

1、QT Designer有多种编辑模式: (1)Widget Editing Mode,(2)Signals and Slots Editing Mode,(3)Buddy Editing Mode和(4)Tab order Editing Mode.
(1)用来设计用户界面;
(2)用拖曳的方式连接Signals和Slots;
(3)用拖曳的方式连接标签和其他对象;(用途是为标签指定热键,通过它来转到相连的对象上)
(4)编辑Tab顺序。双击一个对象为1,然后依次点击剩余对象来设置顺序

2、Designer生成ui文件,在编译过程中make会调用uic来处理这个ui文件,并生成相应的.h文件(QT4中不再生成cpp文件)。如果原始文件为a.ui,则生成的.h文件为ui_a.h。
该.h文件定义一个类(我做了一个简单的窗体,其他的还没有试过),类的名称是窗体设计时窗体的objectname。生成的namespace为Ui。


3、在程序中使用设计好的部件有多种方式:

(1)直接使用
a、在pro文件中包含FORMS = a.ui (qmake会完成这个工作)
b、在所写的程序中(测试中用了一个简单的程序main.cpp)加入相应的include语句,以避免不需要的ui文件混入其中。如#include "ui_a.h" (这里加入的是由ui文件生成的头文件,而不是ui文件)
c、程序中直接来使用。

#include "ui_firstform.h"
#include <QApplication>

int main(int argc ,char * argv[])
{
  QApplication app(argc,argv);
  QDialog *window = new QDialog;
  Ui::ImageDialog ui;
  ui.setupUi(window);

  window->show();
  return app.exec();
}
(2)简单继承:主要是定义一个子类

To ensure that we can use the user interface, we need to include the header file that uic generates before referring to Ui::ImageDialog:
#include "ui_imagedialog.h"
The subclass is defined in the following way:
class ImageDialog : public QDialog
{
Q_OBJECT

public:
ImageDialog(QWidget *parent = 0);

private:
Ui::ImageDialog ui;
};
The important features of the class are the private ui object which provides the code for setting up and managing the user interface.
The constructor for the subclass constructs and configures all the widgets and layouts for the dialog just by calling the ui object's setupUi() function. Once this has been done, it is possible to modify the user interface and create items for the combobox:
ImageDialog::ImageDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);

ui.colorDepthCombo->addItem(tr("2 colors (1 bit per pixel)"));
ui.colorDepthCombo->addItem(tr("4 colors (2 bits per pixel)"));
ui.colorDepthCombo->addItem(tr("16 colors (4 bits per pixel)"));
ui.colorDepthCombo->addItem(tr("256 colors (8 bits per pixel)"));
ui.colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)"));
ui.colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)"));

connect(ui.okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}
We can connect signals from the user interface widgets to slots in the dialog in the usual way, taking care to prefix the ui object to each widget used.

(3)多继承方式

As before, we need to include the header file that uic generates from the imagedialog.ui file:
#include "ui_imagedialog.h"
The class is defined in a similar way to the one used in the private interface approach, except that this time we inherit from both QDialog and Ui::ImageDialog:
class ImageDialog : public QDialog, private Ui::ImageDialog
{
Q_OBJECT

public:
ImageDialog(QWidget *parent = 0);
};
We inherit Ui::ImageDialog privately to ensure that the user interface objects are private in our subclass. We can also inherit it with the public or protected keywords in the same way that we could have made ui public or protected in the previous case.
The constructor for the subclass performs many of the same tasks as the constructor used in the private interface example:
ImageDialog::ImageDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);

colorDepthCombo->addItem(tr("2 colors (1 bit per pixel)"));
colorDepthCombo->addItem(tr("4 colors (2 bits per pixel)"));
colorDepthCombo->addItem(tr("16 colors (4 bits per pixel)"));
colorDepthCombo->addItem(tr("256 colors (8 bits per pixel)"));
colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)"));
colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)"));

connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}
In this case, the interface can be set up using a member function, and the combobox is accessed in the same way as a widget created in code by hand. The push buttons are also referred to directly in the connect() function calls.

(4)自动连接

Although it is easy to implement a custom slot in the dialog and connect it in the constructor, we could instead use uic's auto-connection facilities to connect the OK button's clicked() signal to a slot in our subclass. To do this, we only need to declare and implement a slot with a name that follows a standard convention:
void on_<widget name>_<signal name>(<signal parameters>);
Using this convention, we can define and implement a slot that responds to mouse clicks on the OK button:
class ImageDialog : public QDialog, private Ui::ImageDialog
{
Q_OBJECT

public:
ImageDialog(QWidget *parent = 0);

private slots:
void on_okButton_clicked();
};
Automatic connection of signals and slots provides both a standard naming convention and an explicit interface for widget designers to work to. By providing source code that implements a given interface, user interface designers can check that their designs actually work without having to write code themselves.
分享到:
评论

相关推荐

    Linux QtDesigner自定义Button控件

    在Linux环境下,Qt Designer是一款强大的GUI设计工具,它允许开发者以拖放的方式创建用户界面。在某些特定的应用场景中,我们可能需要自定义特定的控件以满足个性化需求,例如自定义Button控件。本教程将详细介绍...

    Qt Designer汉化包,亲测可用

    Qt Designer是一款强大的图形用户界面(GUI)设计工具,它是Qt库的一部分,用于创建与Qt兼容的用户界面。PyQt5是Python的一个模块,它提供了与Qt5库的接口,允许Python程序员利用Qt的功能来开发GUI应用程序。这个"Qt...

    PyQt 图解Qt Designer工具的使用方法

    Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具...

    QtDesigner设计师(Qt4).zip

    【QtDesigner设计师(Qt4)】是一个关于使用Qt4框架开发图形用户界面的开源项目集合。QtDesigner是Qt库的一部分,它提供了一个可视化编辑器,用于设计GUI(图形用户界面)部件,无需编写复杂的代码。这个压缩包包含了...

    Qt Designer中添加自定义插件示例源码

    "qtdesigner自定义插件.JPG"可能是一张截图,展示了自定义插件在Qt Designer中的实际效果。 总的来说,这个示例源码是一个很好的学习资源,帮助开发者深入理解Qt Designer的插件机制,从而能够根据项目需求创建和...

    Qtdesigner5.2

    Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qtdesigner5.2Qt...

    Qt Designer汉化包亲测可用内附说明.zip

    Qt Designer是一款强大的图形用户界面(GUI)设计工具,它是Qt库的一部分,允许开发者无需编写代码就能创建出美观的用户界面。这个"Qt Designer汉化包亲测可用内附说明.zip"压缩包文件提供了对Qt Designer的中文本地...

    Qt Designer安装包

    **Qt Designer安装包详解** Qt是一款跨平台的开发框架,广泛应用于桌面应用、移动应用以及嵌入式系统的开发。它支持多种操作系统,如Windows、Linux、macOS、Android和iOS等,提供了一套完整的工具链,包括编译器、...

    QtDesigner案例

    **QtDesigner案例** QtDesigner是Qt开发框架中的一个可视化界面设计工具,用于创建GUI(图形用户界面)应用程序的用户界面。这个案例主要关注如何利用QtDesigner来构建具有弹窗和下载进度图功能的UI,而不涉及后端...

    QtDesigner.rar

    在给定的压缩包“QtDesigner.rar”中,包含了一个名为“Qt Designer Setup.exe”的安装文件,这正是用于在Windows操作系统上安装Qt Designer的程序。 Qt Designer通过提供直观的拖放界面,使得程序员可以轻松创建...

    Qt Designer1+Tmake手册中文版.doc

    ### Qt Designer + Tmake 手册知识点概览 #### I. Qt Designer 指南与用户手册 **1. 作为图形用户界面设计者你需要什么?** - **基础知识**: 在开始使用Qt Designer之前,了解一些基本概念是非常重要的。这包括熟悉...

    PyQt5系列教程(二)利用QtDesigner设计UI界面源码包

    在本篇PyQt5系列教程的第二部分中,我们将深入探讨如何使用QtDesigner工具来设计用户界面(UI)并将其转换为Python代码。QtDesigner是Qt库的一部分,它提供了一个直观的图形化界面,使非程序员也能轻松创建复杂的UI...

    QTdesigner, 实现两个数的输入,并进行运算后,弹窗输出

    QTDesigner 是 Qt 框架下的一款可视化设计工具,它允许开发者无需编写任何代码就能创建出用户界面的布局。在本项目中,我们利用 QTdesigner 设计了一个简单的界面,用于接收用户输入的两个数字,并执行计算操作,...

    qtdesigner sqlite qt

    To launch Qt Designer, click Qt 3.2.x|Qt Designer in the Start menu on Windows, type designer on the command line on Unix, or double-click designer in the Mac OS X Finder. When Qt Designer starts, it ...

    pythonqt5教程从零开始-pyQt5QtDesigner简易入门教程.pdf

    **PyQt5与QtDesigner简介** PyQt5是Python编程语言的一个模块,它提供了一种在Python中使用Qt库的方式。Qt是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面(GUI)。PyQt5使得Python程序员能够利用Qt库的...

    Qt Designer Setup.exe(qt界面设计器)

    Qt Designer 是一个强大的工具,它是Qt库的一部分,用于创建图形用户界面(GUI)应用程序。这个工具允许开发者通过直观的拖放界面设计用户界面,而无需编写任何代码。Qt Designer 设计的界面可以导出为.ui文件,这是...

    Qt Designer简体中文语言包

    简体中文语言包:designer_zh_CN.qm。 Qt Designer使用简体中文语言包方法演示请看:https://lanzao.blog.csdn.net/article/details/119065057

    GUI开发示例代码---QTdesigner实现自定义槽函数

    QTDesigner是Qt库提供的一款图形化用户界面设计工具,它允许开发者通过拖拽和配置控件来创建GUI(图形用户界面)布局,而无需编写大量的底层代码。在本示例中,我们将深入探讨如何利用QTDesigner来实现自定义槽函数...

    QT designer 中文插件

    QT Designer是一款强大的图形用户界面(GUI)设计工具,它是QT框架的一部分,用于创建美观且功能丰富的应用程序界面。在默认情况下,QT Designer的界面是英文的,对于中文用户来说,可能会存在语言障碍,使得操作和...

    Qt Designer.rar

    **Qt Designer 深度解析** Qt 是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式系统的用户界面构建。它以其强大的功能、灵活性和高效的性能赢得了全球开发者们的喜爱。Qt 支持多种编程语言,包括 C++...

Global site tag (gtag.js) - Google Analytics