日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

把Qt的界面文件(.ui文件)生成源文件(.h或.cpp)封装成链接库

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 把Qt的界面文件(.ui文件)生成源文件(.h或.cpp)封装成链接库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在用Qt做開發時,為了方便快速,一般都使用Qt設計師界面類來做界面相關的布局,這個類在當前工程中是沒有.cpp或.h文件的,但主類又有引入了這個頭文件,點開轉到定義或聲明時,是打不開的,如下圖:

如果要把整個項目導成dll和lib,就按當前的文件導出,是會報找不到ui_XXX類的路徑的。那什么樣才能把設計好的.ui界面導成dll和lib呢,看了好多種辦法,有真接是用手寫代碼的方式去而已界面,這樣的工作量有點。下面我演示下我覺得可行辦法,雖然有些笨,但起碼可以調用。

解決方法

1.新建一個工程,包含.ui文件,然后打開.ui文件拖入想要的控件,保存,編譯.ui文件。

2.打開當前工程,找到目錄下的.ui文件,復制下來,新建一個目錄把它放進去。

3.然后去qt安路徑下找到uic.exe文件,也把它復制到剛剛放.ui文件的目錄下,此時當前目錄只有兩個文件。


4.按住窗口加R件,輸入cmd,進入控件臺界面,運行uic xxx.ui -o xxx.h或者uic xxx.ui -o xxx.cpp,在當前目錄下就多了一個.h或者.cpp文件,這兩個文件只要一個就可以了。

5.新建一個工程,選擇類庫。

6.把剛才生成的.h文件導入到當前工程,然后打開剛剛生成的源碼,我們可以看到整個類的所有屬性和成員函數。
.ui文件生成的.h文件

/******************************************************************************** ** Form generated from reading UI file 'QtGuiDllDemo.ui' ** ** Created by: Qt User Interface Compiler version 5.7.1 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/#ifndef QTGUIDLLDEMO_H #define QTGUIDLLDEMO_H#include <QtCore/QVariant> #include <QtWidgets/QAction> #include <QtWidgets/QApplication> #include <QtWidgets/QButtonGroup> #include <QtWidgets/QHeaderView> #include <QtWidgets/QMainWindow> #include <QtWidgets/QMenu> #include <QtWidgets/QMenuBar> #include <QtWidgets/QPushButton> #include <QtWidgets/QStatusBar> #include <QtWidgets/QToolBar> #include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_QtGuiDllDemoClass { public:QAction *actionOpen;QWidget *centralWidget;QPushButton *pushButton;QPushButton *pushButton_2;QMenuBar *menuBar;QMenu *menu;QToolBar *mainToolBar;QStatusBar *statusBar;void setupUi(QMainWindow *QtGuiDllDemoClass){if (QtGuiDllDemoClass->objectName().isEmpty())QtGuiDllDemoClass->setObjectName(QStringLiteral("QtGuiDllDemoClass"));QtGuiDllDemoClass->resize(1046, 786);actionOpen = new QAction(QtGuiDllDemoClass);actionOpen->setObjectName(QStringLiteral("actionOpen"));centralWidget = new QWidget(QtGuiDllDemoClass);centralWidget->setObjectName(QStringLiteral("centralWidget"));pushButton = new QPushButton(centralWidget);pushButton->setObjectName(QStringLiteral("pushButton"));pushButton->setGeometry(QRect(330, 210, 231, 111));pushButton_2 = new QPushButton(centralWidget);pushButton_2->setObjectName(QStringLiteral("pushButton_2"));pushButton_2->setGeometry(QRect(400, 430, 231, 81));QtGuiDllDemoClass->setCentralWidget(centralWidget);menuBar = new QMenuBar(QtGuiDllDemoClass);menuBar->setObjectName(QStringLiteral("menuBar"));menuBar->setGeometry(QRect(0, 0, 1046, 23));menu = new QMenu(menuBar);menu->setObjectName(QStringLiteral("menu"));QtGuiDllDemoClass->setMenuBar(menuBar);mainToolBar = new QToolBar(QtGuiDllDemoClass);mainToolBar->setObjectName(QStringLiteral("mainToolBar"));QtGuiDllDemoClass->addToolBar(Qt::TopToolBarArea, mainToolBar);statusBar = new QStatusBar(QtGuiDllDemoClass);statusBar->setObjectName(QStringLiteral("statusBar"));QtGuiDllDemoClass->setStatusBar(statusBar);menuBar->addAction(menu->menuAction());menu->addAction(actionOpen);retranslateUi(QtGuiDllDemoClass);QMetaObject::connectSlotsByName(QtGuiDllDemoClass);} // setupUivoid retranslateUi(QMainWindow *QtGuiDllDemoClass){QtGuiDllDemoClass->setWindowTitle(QApplication::translate("QtGuiDllDemoClass", "QtGuiDllDemo", Q_NULLPTR));actionOpen->setText(QApplication::translate("QtGuiDllDemoClass", "open", Q_NULLPTR));pushButton->setText(QApplication::translate("QtGuiDllDemoClass", "\346\216\247\344\273\266", Q_NULLPTR));pushButton_2->setText(QApplication::translate("QtGuiDllDemoClass", "\347\225\214\351\235\242", Q_NULLPTR));menu->setTitle(QApplication::translate("QtGuiDllDemoClass", "\346\226\207\344\273\266", Q_NULLPTR));} // retranslateUi};namespace Ui {class QtGuiDllDemoClass: public Ui_QtGuiDllDemoClass {}; } // namespace UiQT_END_NAMESPACE #endif // QTGUIDLLDEMO_H

7.按qt給的格式把.h更改之后加到當前類的下面。
在當前工程的類加了ui類的.h文件

#pragma once#include "guidlltest_global.h" #include <QtCore/QVariant> #include <QtWidgets/QAction> #include <QtWidgets/QApplication> #include <QtWidgets/QButtonGroup> #include <QtWidgets/QHeaderView> #include <QtWidgets/QMainWindow> #include <QtWidgets/QMenu> #include <QtWidgets/QMenuBar> #include <QtWidgets/QPushButton> #include <QtWidgets/QStatusBar> #include <QtWidgets/QToolBar> #include <QtWidgets/QWidget>class GUIDLLTEST_EXPORT GuiDllTest { public:GuiDllTest(); };QT_BEGIN_NAMESPACEclass GUIDLLTEST_EXPORT Ui_QtGuiDllDemoClass { public:QAction *actionOpen;QWidget *centralWidget;QPushButton *pushButton;QPushButton *pushButton_2;QMenuBar *menuBar;QMenu *menu;QToolBar *mainToolBar;QStatusBar *statusBar;void setupUi(QMainWindow *QtGuiDllDemoClass);void retranslateUi(QMainWindow *QtGuiDllDemoClass);};namespace Ui {class QtGuiDllDemoClass : public Ui_QtGuiDllDemoClass {}; } // namespace UiQT_END_NAMESPACE

加了ui類的.cpp文件

#include "GuiDllTest.h"GuiDllTest::GuiDllTest() { }void Ui_QtGuiDllDemoClass::setupUi(QMainWindow *QtGuiDllDemoClass) {if (QtGuiDllDemoClass->objectName().isEmpty())QtGuiDllDemoClass->setObjectName(QStringLiteral("QtGuiDllDemoClass"));QtGuiDllDemoClass->resize(1046, 786);actionOpen = new QAction(QtGuiDllDemoClass);actionOpen->setObjectName(QStringLiteral("actionOpen"));centralWidget = new QWidget(QtGuiDllDemoClass);centralWidget->setObjectName(QStringLiteral("centralWidget"));pushButton = new QPushButton(centralWidget);pushButton->setObjectName(QStringLiteral("pushButton"));pushButton->setGeometry(QRect(330, 210, 231, 111));pushButton_2 = new QPushButton(centralWidget);pushButton_2->setObjectName(QStringLiteral("pushButton_2"));pushButton_2->setGeometry(QRect(400, 430, 231, 81));QtGuiDllDemoClass->setCentralWidget(centralWidget);menuBar = new QMenuBar(QtGuiDllDemoClass);menuBar->setObjectName(QStringLiteral("menuBar"));menuBar->setGeometry(QRect(0, 0, 1046, 23));menu = new QMenu(menuBar);menu->setObjectName(QStringLiteral("menu"));QtGuiDllDemoClass->setMenuBar(menuBar);mainToolBar = new QToolBar(QtGuiDllDemoClass);mainToolBar->setObjectName(QStringLiteral("mainToolBar"));QtGuiDllDemoClass->addToolBar(Qt::TopToolBarArea, mainToolBar);statusBar = new QStatusBar(QtGuiDllDemoClass);statusBar->setObjectName(QStringLiteral("statusBar"));QtGuiDllDemoClass->setStatusBar(statusBar);menuBar->addAction(menu->menuAction());menu->addAction(actionOpen);retranslateUi(QtGuiDllDemoClass);QMetaObject::connectSlotsByName(QtGuiDllDemoClass); } // setupUivoid Ui_QtGuiDllDemoClass::retranslateUi(QMainWindow *QtGuiDllDemoClass) {QtGuiDllDemoClass->setWindowTitle(QApplication::translate("QtGuiDllDemoClass", "QtGuiDllDemo", Q_NULLPTR));actionOpen->setText(QApplication::translate("QtGuiDllDemoClass", "open", Q_NULLPTR));pushButton->setText(QApplication::translate("QtGuiDllDemoClass", "\346\216\247\344\273\266", Q_NULLPTR));pushButton_2->setText(QApplication::translate("QtGuiDllDemoClass", "\347\225\214\351\235\242", Q_NULLPTR));menu->setTitle(QApplication::translate("QtGuiDllDemoClass", "\346\226\207\344\273\266", Q_NULLPTR)); } // retranslateUi

8.重新生成解決方案,就在當前目錄下生成一個dll文件和lib文件,按正常類調用就可以了。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的把Qt的界面文件(.ui文件)生成源文件(.h或.cpp)封装成链接库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产免费脚交足视频在线观看 | 老司机免费视频 | 亚洲国产中文字幕在线 | 亚洲AV无码精品黑人黑人 | 国产日韩欧美精品在线 | 韩国主播青草200vip视频 | 永久精品网站 | 欧美爱爱视频 | 国产丰满大乳奶水在线视频 | 一区二区三区在线播放视频 | 人妻饥渴偷公乱中文字幕 | 亚洲视频一二三 | 特级做a爰片毛片免费69 | 麻豆av影视| 国产99久久久久久免费看 | 91精品一区二区 | av免费不卡 | 久久久久久久久久99精品 | 精品国产无码一区二区三区 | 日韩av在线观看免费 | 97久久久 | www日韩在线观看 | 猛男被粗大男男1069 | 成人欧美性 | 国产又爽又黄游戏 | 国产一二在线 | 亚洲欧美综合久久 | 免费看日韩毛片 | 中文字幕xxx | 国产成人激情视频 | 97国产视频| 激情青青草| www.五月天婷婷.com | 国产露脸91国语对白 | 国产va| 日韩成人黄色 | 巨骚综合 | 污视频网站免费观看 | 中文字幕无线码一区 | 亚洲精品视频一二三区 | 精品免费久久久 | 欧美色图小说 | 天天摸夜夜添狠狠添婷婷 | 欧美在线xxxx | 久久久欧洲 | 欧美视频在线观看免费 | 日韩精品一二区 | 亚洲国产一区二区三区a毛片 | 久久精品23 | 欧美综合亚洲图片综合区 | 亚洲精品久久久中文字幕痴女 | 老鸭窝久久| 成人爽a毛片一区二区 | 国产欧美一区二区三区精品酒店 | 欧美综合社区 | 午夜亚洲av永久无码精品 | a级欧美 | 中文字幕一区二区三区四区五区 | 91国内精品视频 | 国产精品黑人一区二区三区 | 亚欧在线免费观看 | xxxx.国产 | 欧美日韩福利视频 | 久草日韩 | 制服丝袜在线视频 | 一区二区三区四区影院 | 四虎网址大全 | 蜜桃成人在线观看 | 成人动漫一区二区三区 | 女人的天堂网站 | 色眯眯视频 | 国产精品suv一区二区三区 | 欧美色女人 | 日本黄色三级视频 | 韩国美女一区二区 | 激情二区 | 黄色精品网站 | 亚洲成人av免费观看 | 97超碰人| 欧美人妖老妇 | 亚洲天堂性 | 国产精品一区在线免费观看 | 婷婷国产一区 | 一级黄色片一级黄色片 | 欧美激情成人网 | 国产一级一级国产 | 窝窝在线视频 | 免费无毒av | 亚洲国产91| 国产精品av一区二区 | 日本久久爱 | 中文字幕有码在线视频 | 精品一区二区av | 中文字幕第8页 | 91亚色在线观看 | 99产精品成人啪免费网站 | 日本黄色片免费看 | 久久理论视频 | 黄页网站在线播放 |