QT程序中引入designer自定义窗口部件

本文介绍了如何使用QTdesigner工具快速绘制UI界面,并通过uic编译工具将UI文件(.ui)转换为C++源文件(ui_xx.h),最后详细解释了如何在程序中引入生成的窗口部件,包括直接使用、单一继承和多重继承三种方式,以及创建.pro工程以简化集成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一个科班出生的程序猿,总喜欢亲力亲为,包括UI也总要通过代码实现。但是QT designer提供了一种高效率、简洁美观的绘制UI的方法,总有它存在的必要和优点吧。所以,今天操刀来把绘制的UI文件(.ui格式)引入自己的工程中。

(一)绘制xx.ui

作为一款所见即所得的UI绘制工具,qt designer足够强大和简易,新建一个文件保存该ui文件。qt designer怎么用不是今天的重点,傻瓜式的操作,呵呵。

注意:

(1)部件的命名要符合自己的一贯风格,方便后续开发。

(2)顶层窗口部件的objectName就是xx.ui文件生成的ui_xx.h文件中Ui命名空间自动产生的类名。

比如在绘制xx.ui时,我把顶层窗口命名为finddialog,那么通过uic生成的ui_xx.h文件自动命名的类名就为finddialog


其他的问题遇到再补充。


(二)uic编译工具编译xx.ui

这一步成功的关键是正确配置qmake工具,在安装QT 时就要注意,如果qmake工具变量配置不正确,重新配置环境变量。

我在win7下: 打开 qt command prompt会提示一些配置好的环境变量:


(1)如果qmake工具配置正确,打开qmake,windows下打开QT安装时产生的 qt command prompt即可。

(2)切换到保存xx.ui文件的目录下

windows下切换路径相比linux有点蛋疼,要再确定盘符才能进入目录:


(三)uic -o ui_xx.h xx.ui

调用UIC编译工具将XML的xx.ui文件编译成C++源文件:ui_xx.h

注意命名规则:ui_xx.h

执行完后,工作目录中中会产生ui_xx.h文件,打开看看:


(1)自动生成的注释,提示修改该文件无效。自动添加用到的头文件。


(2)头文件定义了一个POD(plain old data)类Ui_finddialog,所用到的部件都声明为public,所以,你可以放心的继承该类,放心的直接调用其成员。


(3)头文件里定义了几个内联函数,是公有函数。最重要的就是函数setUi(),它对传入的窗口部件设置标题、大小、子部件和窗口和布局等,并作为顶层窗口部件,该函数还限制了传入窗口部件的类型,该类型是绘制xx.ui时顶层窗口的类型。所以在绘制xx.ui时考虑清楚选择什么类型作为顶层窗口。


(4)自动生成一个Ui命名空间,在该命名空间里共有继承了自动生成的类Ui_xx,新的类名就是顶层窗口的objectName。



(四)在程序中引入生成的窗口部件,生成.pro工程

注意:此时还没有建立.pro工程,只有一个头文件。

引入生成的窗口部件其实就是该如何使用生成的类。

有三种方式:

(1)直接使用

直接把生成的头文件当做普通头文件,只不过不用实现.cpp文件啦,放在自己的程序中使用。

(2)单一继承

在QT creator中直接创建带UI文件的工程时,默认采用单一继承的方式。把UI文件产生的类当做私有成员,其内联函数通过类名调用。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

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

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

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


(3)多重继承

(五)直接使用的例子

(1)在工作目录下新建main.cpp空白文件,使用喜欢的编辑器编辑该文件,调用ui_xx.h

#include<QApplication>
#include<QDialog>
#include "ui_finddialog.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::finddialog ui;
	QDialog *dialog = new QDialog;
	ui.setupUi(dialog);
	dialog->show();
	return app.exec();
}

要点:添加头文件,调用生成类和共有函数。测试程序,这里先不考虑内存泄露问题。

(2)qmake -project

该命令生成一个和之前新建保存xx.ui文件的文件夹名一样的.pro文件,所以文件夹命名也要注意。

######################################################################
# Automatically generated by qmake (2.01a) ?? ?? 7 20:44:34 2014
######################################################################

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
FORMS += finddialog.ui
SOURCES += main.cpp


修改该.pro文件:

加入头文件:

HEADERS +=ui_finddialog.h

(3).pro修改完成后,在QT IDE下编译即可,运行结果:


### 实现视频播放功能的方法 在Qt Designer中实现视频播放功能可以通过多种途径完成,其中一种常见的方式是借助于`QWidget`作为容器并结合C++或Python代码来嵌入视频播放逻辑。对于希望快速集成视频播放能力的应用程序来说,使用Qt Multimedia模块是一个较为简便的选择[^1]。 另一种更为灵活但复杂度稍高的方法则是引入FFmpeg库来进行底层的音视频处理工作。这种方式允许开发者对播放过程中的各个环节拥有更高的掌控力,比如自定义解码流程或是调整图像渲染效果等[^3]。 #### 使用Qt Multimedia模块简化开发 为了使项目保持简洁易维护的特点,推荐优先考虑采用内置的支持较好的Qt Multimedia组件。具体而言: - **安装依赖**:确保已安装Qt Multimedia及相关插件。 - **拖拽控件**:打开Qt Designer后,在表单上放置一个`QVideoWidget`用于显示视频画面;同时可以添加按钮、滑动条等其他UI元素以便构建完整的控制器面板[^2]。 - **编写连接逻辑**:保存`.ui`文件并通过PySide6/PyQt5加载此界面布局,之后利用Python脚本设置媒体源路径,并建立必要的信号与槽关联以驱动播放行为。 ```python from PySide6.QtCore import QUrl from PySide6.QtMultimedia import QMediaPlayer from PySide6.QtMultimediaWidgets import QVideoWidget import sys from PySide6.QtWidgets import QApplication, QMainWindow class VideoPlayer(QMainWindow): def __init__(self): super().__init__() self.media_player = QMediaPlayer() video_widget = QVideoWidget() # 设置窗口中心部件为video_widget self.setCentralWidget(video_widget) # 将media player 的输出设备设为video_widget self.media_player.setVideoOutput(video_widget) if __name__ == '__main__': app = QApplication(sys.argv) main_win = VideoPlayer() media_url = "file:///path/to/video.mp4" main_win.media_player.setSource(QUrl(media_url)) main_win.show() sys.exit(app.exec()) ``` 上述代码展示了如何创建一个简单的基于Qt Multimedia的视频播放器实例,其中包括了基本的初始化操作和资源加载步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值