qt中的ui_ui mainwindow.hh文件是自动创建的吗,还是要手动输入啊,我看别人的源码都不显示这个头文件

12550人阅读
用最新的QtCreator选择GUI的应用会产生含有如下文件的工程
下面就简单分析下各部分的功能。
.pro文件是供qmake使用的文件,不是本文的重点【不过其实也很简单的】,在此不多赘述。
所以呢,还是从main开始,
#include &QtGui/QApplication&
#include &mainwindow.h&
int main(int argc, char *argv[])
QApplication a(argc, argv);
return a.exec();
很简单的样子
QApplication a(argc, argv)和a.exec()可以理解为载入了Qt的架构,跑Qt的程序都要有此部,就不多说了。
其中调用了个MainWindow并把它show了出来,具体分析下
下面是mainwindow.h中的内容
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include &QtGui/QMainWindow&
namespace Ui
class MainW
class MainWindow : public QMainWindow
MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *
#endif // MAINWINDOW_H
开始的namespace Ui可能让人有点摸不着头脑,这是因为qt把ui相关的类单独独立了出来,但类名相同,禁用namespace区别【但是就目前的使用来说,感觉这样做不怎么好,后面我会解释原因】
声明namespace Ui是因为要调用Ui中的MainWindow,此MainWindow非彼MainWindow,后面涉及的*ui指针会调用它!
关于Q_OBJECT就不说了,Qt中与signal和slot相关的类都要这么声明下。
仔细看出了构造,析构就没啥了,只有那么个*ui!不过现在如果运行下,也只会生成个窗体而已。
下面来看构造函数和析构函数,其实也就是mainwindow.c
#include &mainwindow.h&
#include &ui_mainwindow.h&
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
ui-&setupUi(this);
MainWindow::~MainWindow()
构造时在堆上new了个Ui域中的MainWindow,并调用setupUi,析构仅仅是将其delete了,还是很简单!
正如前面所述Qt很好的把ui分离了出去,前面图中的那个.ui文件就是让QtDesigner使的布局用文件!
现在运行下,会生成ui_mainwindow.h,这个里面会涉及到真正布局用的函数,也就是那个Ui域中的MainWindow.下面具体看一下,
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include &QtCore/QVariant&
#include &QtGui/QAction&
#include &QtGui/QApplication&
#include &QtGui/QButtonGroup&
#include &QtGui/QHeaderView&
#include &QtGui/QMainWindow&
#include &QtGui/QMenuBar&
#include &QtGui/QStatusBar&
#include &QtGui/QToolBar&
#include &QtGui/QWidget&
QT_BEGIN_NAMESPACE
class Ui_MainWindow
QMenuBar *menuB
QToolBar *mainToolB
QWidget *centralW
QStatusBar *statusB
void setupUi(QMainWindow *MainWindow)
if (MainWindow-&objectName().isEmpty())
MainWindow-&setObjectName(QString::fromUtf8(&MainWindow&));
MainWindow-&resize(600, 400);
menuBar = new QMenuBar(MainWindow);
menuBar-&setObjectName(QString::fromUtf8(&menuBar&));
MainWindow-&setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar-&setObjectName(QString::fromUtf8(&mainToolBar&));
MainWindow-&addToolBar(mainToolBar);
centralWidget = new QWidget(MainWindow);
centralWidget-&setObjectName(QString::fromUtf8(&centralWidget&));
MainWindow-&setCentralWidget(centralWidget);
statusBar = new QStatusBar(MainWindow);
statusBar-&setObjectName(QString::fromUtf8(&statusBar&));
MainWindow-&setStatusBar(statusBar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
MainWindow-&setWindowTitle(QApplication::translate(&MainWindow&, &MainWindow&, 0, QApplication::UnicodeUTF8));
Q_UNUSED(MainWindow);
} // retranslateUi
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H
吼吼,一下子多了不少,但其实还是很容易的。Ui_MainWindow声明了几个构件,具体我就不说了,因为也没啥可说的,它实现了setupUi函式,也就是前面那个MainWindow中调用的setupUi。
但是要说明的是QMetaObject::connectSlotsByName函式会自动连接相应名称的信号与槽,但要注意它连接的是传入的MainWindow及其子构件【不是子类】,注意前边ui-&setupUi(this)中传入的this,也就是非ui域中的MainWindow,所以如果要声明signal和slot时还是要在非ui域的MainWindow中来声明,然后通过ui-&xxx的形式来与GUI产生交互!如果我们在QtDesiner中拖放一个按钮然后点击go
to slot就很容易印证这一点。
retranslateUi则会为ui中的构件命名,具体也不在此多说。
最后还是看看这段代码
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
前面非Ui域中的MainWindow的*ui指向的是Ui域中的MainWindow,而Ui域中的MainWindow出了继承了Ui_MainWindow之外,内部一贫如洗!【有点绕口了】
来张图片,再复习下
最后要说明的有两点,个人感觉是QtCreator的BUG,
其一是如果自己定制控件,并且想在内置的designer中载入,win下用mingw是不可行的,因为sdk套件中的designer是用微软的编译器编译的,当然也有个比较方便的解决的办法,就是把qtcreator的源码下来,用现有的creator再编译一遍,然后覆盖过去就行了。
其二也是前面提到的,两个同名的MainWindow仅用Ui域来区分,虽然感觉这样做从设计上来说是很美的,但调试时却会有些许的问题,总之在creator中调试不能识别正确的域,具体见下图例
像上面这张图this实际上应该指向的是非Ui域中的MainWindow【this其实指向的是MainWindow,它并不知是哪个域的MainWindow,再往下展开就错误的指向了Ui域】,但调试的数据区指向了Ui域中的MainWindow,当然也不是没有解决的办法,你可以手工将Ui域中的MainWindow改下名就可以获得正确的调试信息了,只是这样做稍显麻烦,而且再度运行qmake后可能还要重新修改。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:631572次
积分:8979
积分:8979
排名:第819名
原创:201篇
转载:10篇
译文:32篇
评论:374条
欢迎大家交流学习!
阅读:4380
(16)(1)(3)(1)(3)(5)(3)(2)(1)(2)(3)(1)(4)(4)(1)(5)(8)(2)(2)(6)(1)(5)(2)(6)(10)(8)(8)(4)(6)(3)(8)(8)(33)(26)(11)(1)(4)(14)(2)(1)(4)(5)将QT里的.ui生成.h资料,并在.cpp中对.ui中的控件写事件及支持中文_您需要知道的 16 个 Linux 服务器监控命令如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员_札记:linux 编译 .ko 模块__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
将QT里的.ui生成.h资料,并在.cpp中对.ui中的控件写事件及支持中文
您需要知道的 16 个 Linux 服务器监控命令如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员
札记:linux 编译 .ko 模块
将QT里的.ui生成.h资料,并在.cpp中对.ui中的控件写事件及支持中文
将QT里的.ui生成.h文件,并在.cpp中对.ui中的控件写事件及支持中文by zxy,Java/C++编程交流群QQ:
在上一篇文章的基础上:
(1)双击mainwindow.ui,在窗体中增加一个pushButton保存
(2)开始-&运行-&输入cmd回车,cd到.ui所在的位置:C:\Qt\qtcreator-2.5.0\gui\gui输入
uic -o temp.h mainwindow.ui 可以看到C:\Qt\qtcreator-2.5.0\gui\gui文件夹下多了一个temp.h文件
将此temp.h的内容替换C:\Qt\qtcreator-2.5.0\gui\gui-build-desktop-Qt_4_8_1__qmake____中ui_mainwindow.h中的内容
(3)用信号槽来处理
mainwindow.h中增加对事件槽的声明:
class MainWindow : public QMainWindow
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *
private slots:
void on_pushButton_clicked();
对于click点击事件,qt中硬性规定为 on_控件ID_clicked();
例如ID为pushButton的button控件,我们只用在class的head里面写
prvate slots:
void on_pushButton_clicked();
mainwindow.cpp中增加 #include &QMessageBox&
void MainWindow::on_pushButton_clicked()
QMessageBox::information(this,tr("提示"),tr("点击了pushButton"));
支持中文修改main.cpp
#include &QApplication&
#include "mainwindow.h"
#include &QTextCodec&
int main(int argc, char *argv[])
QApplication a(argc, argv);
//设置中文开始
QTextCodec *codec = QTextCodec::codecForName("System");
//获取系统编码
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
return a.exec();
您需要知道的 16 个 Linux 服务器监控命令如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员
你需要知道的 16 个 Linux 服务器监控命令如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。
  有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的 KDE System Guard 同样很出色。当然,要使用这些工具,你必须在服务器跟前进行操作,而且这些 GUI 的程序占用了很多系统资源,所以说,尽管 GUI 用来做基本的服务器健康状态监测挺好,但如果你想知道真正发生什么,请关掉 GUI 开始命令行之旅吧。
  你应该只在需要的时候去启动 GUI ,不用的时候关掉它。如果要让服务器保持最佳性能,你应该将 Linux 服务器的运行级别 runlevel 设置为 3 ,就是控制台模式,当你需要图形化桌面的时候使用 startx 命令来启动它。
  如果你的服务器启动后就直接进入图形界面,你需要修改配置 /etc/inittab 找到 initdefault 一样,将 id:5:initdefault 修改为 id:3:initdefault。
  如果你没找到 /etc/inittab 文件,那就创建一个新的,文件内容增加 id:3 这么一行。这样下次服务器启动的时候就不会进入图形界面。如果你不想等到服务器重启的时候才生效,你可以执行 init 3 这个命令。
  一旦你的服务器是在控制台模式下运行,你就可以开始我们接下来的内容。  iostat
  iostat
命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。  meminfo 和 free
  Meminfo
可让你获取内存的详细信息,你可以使用 cat 和 grep 命令来显示 meminfo 信息:  1cat /proc/meminfo
  另外你可以使用 free 命令来显示动态的内存使用信息,free 只是给你大概的内存信息,而 meminfo 提供的信息更加详细。  mpstat
  mpstat
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
  关于 mpstat 执行结果中的参数意思请参考此贴。  netstat
  Netstat 和 ps 命令类似,是 Linux 管理员基本上每天都会用的工具,它显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等,下面是一些常用的参数:  1-a Show all socket information  2-r Show routing information  3-i Show network interface statistics  4-s Show network protocol statistics  nmon
  Nmon, 是 Nigel's Monitor 的缩写,是一个使用很普遍的开源工具,用以监控 Linux 系统的性能。Nmon 监控多个子系统的性能数据,例如处理器的使用率、内存使用率、队列、磁盘I/O统计、网络I/O统计、内存页处理和进程信息。Nmon 也提供了一个图形化的工具.
  要运行 nmon,你可以在命令行中启动它,然后选择要监控的子系统,这些子系统都对应有一个快捷键,例如输入 c 可查看 CPU 信息,m用于查看内存,d用来查看磁盘信息等,你也可以使用 -f 命令将 nmon 的执行结果保存到一个 CSV 文件中,便于日后分析。
  在每日的监控工作中,我发现 nmon 是我最常用的工具。  pmap
  pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。  ps 和 pstree
  ps 和 pstree 命令是 Linux 系统管理员最好的朋友,都可以用来列表正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。  sar
  sar 程序是系统监控工具里的瑞士军刀。该程序包含三个工具:sar 用来显示数据,sa1 和 sa2 用来收集数据并保存。sar 可用来显示 CPU 使用率、内存页数据、网络 I/O 和传输统计、进程创建活动和磁盘设备的活动详情。sar 和 nmon 最大的不同就是 sar 跟适合用作长期的监控,而 nmon 可以让你快速的了解系统当前状态。  strace
  strace 经常被认为是程序员调试的工具,但不止如此。它可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。
  Strace 也有一个缺陷,但它在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。  tcpdump
  Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。当然,如果你要获取跟详细的信息,你应该使用 Wireshark (下面我们会介绍).  top
  top 命令显示当前的活动进程,默认它是按消耗 CPU 的厉害程度进行排序,每5秒钟刷新一次列表,你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。  uptime
  uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况  vmstat
  你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。  Wireshark
  Wireshark, 前身是 Ethereal ,是一个网络协议检测程序,让您经由程序抓取运行的网站的相关资讯,包括每一封包流向及其内容、资讯可依操作系统语系看出,方便查看、监控TCP session动态等等.
这里罗列的是大多数最有价值的 Linux 监控程序,当然,你可能还会使用其他的工具,不妨跟大家分享下
札记:linux 编译 .ko 模块
笔记:linux 编译 .ko 模块
写个my.c和一个Makefile文件,然后make编译一下,就成功了,生成my.ko再加载一下insmod my.ko
dmesg|grep module 看到模块初始化时候的打印卸载模块rmmod my.ko
dmesg|grep module
看模块卸载时候的打印都是对的,看来以前学的东西还是记得了……再mark一下。注意事项:1、内核目录2、Makefile中obj-m:=my.o 这个和源文件my.c要对应3、mymodule-objs:=module 这个my也是和my.c对应的如果源文件为your.c这两句话就应该改为obj-m:=your.oyourmodule-objs:=module4、查看输出的时候 用dmesg输出信息太多,可以用grep过滤一下dmesg | grep "keywords"内核源文件view plaincopy to clipboardprint?#include &linux/init.h&
#include &linux/kernel.h&
#include &linux/module.h&
static int funcIn(void)
printk("in module");
static void funcOut(void)
printk("out module");
module_init(funcIn);
module_exit(funcOut);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("elfy");
Makefile 文件我linux内核目录为/lib/modules/2.6.31-14-generic/build具体看自己机器的文件view plaincopy to clipboardprint?obj-m:=my.o
mymodule-objs:=module
KDIR:=/lib/modules/2.6.31-14-generic/build
MAKE:=make
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:7116人阅读
记录一下如何在 Qt中打开一幅图片
1. 新建一个项目,Qt C++ 项目, Qt GUI应用
之后按步骤新建就可以了,
2. 勾选中下面这三个
3. 新建一个MainWindow
点击下一步, 完成, 工程创建完毕
4 这一步之后是具体如何用Qt打开一幅图片
双击mainwindow.ui 进入design模式,
拖拽到上方
于是就出现了一个窗口。
5. 之后添加一个打开图片的按钮
拖拽一个PushButton, 用同样的方法,之后改变名字为OpenImageBtn这个是Button对象实例的名字
6. 添加信号事件, 按了OpenImageBtn之后,打开图片文件
回到 需要定义一个SLOT信号槽,来处理按了button的事件,这里有一个on_slotOpenImage_triggered() 信号槽
具体参看代码.其他包括文件打开的代码,参考网上
头文件——
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include &QMainWindow&
#include &QImage&
#include &QGraphicsView&
#include &QGraphicsScene&
#include &QFileDialog&
namespace Ui {
class MainW
class MainWindow : public QMainWindow
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *
private slots:
void on_slotOpenImage_triggered(); //信号槽
#endif // MAINWINDOW_H
源文件——
#include &QtGui/QApplication&
#include &mainwindow.h&
int main(int argc, char *argv[])
QApplication a(argc, argv);
return a.exec();
mainwindow.cpp
#include &mainwindow.h&
#include &ui_mainwindow.h&
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui-&setupUi(this);
resize(800,600);
this-&image = new QImage();
//connect the button listener event
connect(ui-&OpenImageBtn,SIGNAL(clicked()), this, SLOT(on_slotOpenImage_triggered()));
void MainWindow::on_slotOpenImage_triggered()
QString fileName = QFileDialog::getOpenFileName(
this, &open image file&,
&Image files (*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm);;All files (*.*)&);
if(fileName != &&)
if(image-&load(fileName))
QGraphicsScene *scene = new QGraphicsS
scene-&addPixmap(QPixmap::fromImage(*image));
ui-&graphicsView-&setScene(scene);
ui-&graphicsView-&resize(image-&width() + 10, image-&height() + 10);
ui-&graphicsView-&show();
MainWindow::~MainWindow()
实现效果:
未打开时:
未完待续。。。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:547575次
积分:7667
积分:7667
排名:第1104名
原创:225篇
转载:90篇
评论:90条
(1)(1)(1)(2)(6)(1)(7)(10)(6)(5)(11)(3)(1)(13)(3)(7)(4)(14)(3)(1)(10)(11)(4)(1)(6)(13)(10)(13)(15)(20)(17)(20)(11)(21)(20)(22)(3)随笔 - 181&
评论 - 254&
&&&&&&&&&&&
前言:从上个月底因为新项目统一平台需要用Qt开发,就开始研究Qt,但是一直感觉没有入门,不知道为什么,很多功能实现了,但是知其然不知其所以然,就像现在设计的项目
使用插件进行开发,做软件开发大体都知道什么事插件式开发,以前c#也用过,但是Qt插件开发还是第一次,百度了很久终于实现,这里记录下!这里不讲原理直接讲过程,高手绕行。。。
建立插件程序实现2个功能
(1)创建一个加法函数供主程序进行动态调用
(2)创建一个查询页面供主程序进行动态调用
第一步创建插件程序
打开文件菜单-》新建文件或项目-》选择other project -》C++库如图
点击Choose进入如图
选择共享库-》输入名称-》选择你工程位置
点击下一步选择工程需要模块点击下一步完成
完成后你会发现工程有2个头文件和一个源文件
这里点击新建文件添加一个新建文件
新建文件-》Qt-》Qt设计类-》选择dialog-》输入名称
MYTESTDLL_GLOBAL_H
MYSHOWTEST_H
#ifndef MYSHOWTEST_H
#define MYSHOWTEST_H
#include &QDialog&
namespace Ui {
class MyShowT
class MyShowTest : public QDialog
explicit MyShowTest(QWidget *parent = 0);
~MyShowTest();
Ui::MyShowTest *
#endif // MYSHOWTEST_H
MYTESTDLL_H
#ifndef MYTESTDLL_H
#define MYTESTDLL_H
#include "MyTestDll_global.h"
#include "qdialog.h"
class MYTESTDLLSHARED_EXPORT MyTestDll {
MyTestDll();
extern "C" Q_DECL_EXPORT int add(int a,int b);
extern "C" Q_DECL_EXPORT QDialog *showDialog();
#endif // MYTESTDLL_H
源文件MyShowTest.cpp
#include "myshowtest.h"
#include "ui_myshowtest.h"
MyShowTest::MyShowTest(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyShowTest)
ui-&setupUi(this);
MyShowTest::~MyShowTest()
MyTestDll.cpp
#include "mytestdll.h"
#include "MyShowTest.h"
MyTestDll::MyTestDll()
int add(int a,int b)
return a+b;
QDialog *showDialog()
MyShowTest *ss=new MyShowTest();
点击构建项目完成插件。
新建一个主程序如图
把生成的插件mytestdll.dll放入mytest.exe相同目录
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include &QMainWindow&
namespace Ui {
class MainW
class MainWindow : public QMainWindow
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *
private slots:
void on_pushButton_2_clicked();
void on_pushButton_clicked();
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qlibrary.h"
#include "qmessagebox.h"
#include "string.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui-&setupUi(this);
MainWindow::~MainWindow()
typedef int (*Fun)(int,int); //定义函数指针,以备调用
void MainWindow::on_pushButton_clicked()
QLibrary mylib("MyTestDll.dll");
//声明所用到的dll文件
if (mylib.load())
//判断是否正确加载
Fun open=(Fun)mylib.resolve("add");
//援引 add() 函数
//是否成功连接上 add() 函数
int s1=this-&ui-&lineEdit-&text().toInt();
int s2=this-&ui-&lineEdit_2-&text().toInt();
result=open(s1,s2);
//这里函数指针调用dll中的 add() 函数
sresult=QString::number(result);
this-&ui-&lineEdit_3-&setText(sresult);
QMessageBox::information(NULL,"NO","DLL is not loaded!");
typedef QDialog *(*Funs)(); //定义函数指针,以备调用
void MainWindow::on_pushButton_2_clicked()
//加载插件
QLibrary mylib("MyTestDll.dll");
//声明所用到的dll文件
if (mylib.load())
//判断是否正确加载
Funs open=(Funs)mylib.resolve("showDialog");
//援引 add() 函数
//是否成功连接上 add() 函数
QDialog *form1= open();
form1-&show();
完成预定2个功能
源码下载:
ps:博客园怎么提供源码下载呢。。。
阅读(...) 评论()

我要回帖

更多关于 qt ui文件 的文章

 

随机推荐