日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/3/21 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 把Qt的界面文件(.ui文件)生成源文件(.h或.cpp)封装成链接库 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在用Qt做開(kāi)發(fā)時(shí),為了方便快速,一般都使用Qt設(shè)計(jì)師界面類(lèi)來(lái)做界面相關(guān)的布局,這個(gè)類(lèi)在當(dāng)前工程中是沒(méi)有.cpp或.h文件的,但主類(lèi)又有引入了這個(gè)頭文件,點(diǎn)開(kāi)轉(zhuǎn)到定義或聲明時(shí),是打不開(kāi)的,如下圖:

如果要把整個(gè)項(xiàng)目導(dǎo)成dll和lib,就按當(dāng)前的文件導(dǎo)出,是會(huì)報(bào)找不到ui_XXX類(lèi)的路徑的。那什么樣才能把設(shè)計(jì)好的.ui界面導(dǎo)成dll和lib呢,看了好多種辦法,有真接是用手寫(xiě)代碼的方式去而已界面,這樣的工作量有點(diǎn)。下面我演示下我覺(jué)得可行辦法,雖然有些笨,但起碼可以調(diào)用。

解決方法

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

2.打開(kāi)當(dāng)前工程,找到目錄下的.ui文件,復(fù)制下來(lái),新建一個(gè)目錄把它放進(jìn)去。

3.然后去qt安路徑下找到uic.exe文件,也把它復(fù)制到剛剛放.ui文件的目錄下,此時(shí)當(dāng)前目錄只有兩個(gè)文件。


4.按住窗口加R件,輸入cmd,進(jìn)入控件臺(tái)界面,運(yùn)行uic xxx.ui -o xxx.h或者uic xxx.ui -o xxx.cpp,在當(dāng)前目錄下就多了一個(gè).h或者.cpp文件,這兩個(gè)文件只要一個(gè)就可以了。

5.新建一個(gè)工程,選擇類(lèi)庫(kù)。

6.把剛才生成的.h文件導(dǎo)入到當(dāng)前工程,然后打開(kāi)剛剛生成的源碼,我們可以看到整個(gè)類(lèi)的所有屬性和成員函數(shù)。
.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更改之后加到當(dāng)前類(lèi)的下面。
在當(dāng)前工程的類(lèi)加了ui類(lèi)的.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類(lèi)的.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.重新生成解決方案,就在當(dāng)前目錄下生成一個(gè)dll文件和lib文件,按正常類(lèi)調(diào)用就可以了。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。