如何在程序中直接调用ui,有三种方法
1:直接调用
2:单继承法
3:多继承法
关于直接调用:
通过qt生成一个比如name的ui文件,然后通过qt自带的uic工具生成一个name.h
uic生成具体方法是:首先进入到命令行转到你当前pro所在的目录 然后uic -o name.h name.ui即可.ui和h名字一定要相同
然后调用即可 比如:
#include "ui_name.h"
int main( int argc, char * argv[])
{ QApplication app( argc, argv);
Ui:: Name ui;
QDialog * dialog= new QDialog ;//ui为QDialog
ui. setupUi( dialog);
dialog-> show();
return app. exec();
}
关于单继承调用:
和之前方法一样生成一个 first.ui 相应的头文件first.h 然后比如我们新建一个MyWidget的类 继承QWidget 在MyWidget.h中
具体代码如下:
#include "ui_myfirst.h"
class MyWidget : public QWidget
{ Q_OBJECT
public : explicit MyWidget( QWidget * parent = 0 );
private :
Ui:: myfirst myfirstUi;
}
在MyWidget.cpp中 具体代码如下:
#include "mywidget.h"
MyWidget:: MyWidget( QWidget * parent) : QWidget ( parent)
{ QWidget * w1= new QWidget ;
myfirstUi. setupUi( w1); //注意一点 如果需要调用myfirstUi中任何一个控件方法 那就需要加上myfirstUi::才行
w1-> show();
}
关于多继承调用:
新建一个ThirdDialog类 在ThirdDialog.h中 后面继承了Ui::mythird
#include <QDialog>
#include "ui_mythird.h"
class ThirdDialog : public QDialog , private Ui:: mythird
{ Q_OBJECT
public : explicit ThirdDialog( QWidget * parent = 0 );
};
ThirdDialog.cpp中
#include "thirddialog.h"
ThirdDialog:: ThirdDialog( QWidget * parent) : QDialog ( parent)
{
setupUi( this );
}
这样就可以直接使用mythird中的控件了 无需加上ui对象前缀 在 clickSlot函数中 可以直接调用ThirdDialog了
void MyWidget:: clickSlot()
{
ThirdDialog * dlg= new ThirdDialog; dlg-> exec();
}
另外如果只需要加载下ui 并不需要更新内部内容 可以用QUiLoader进行动态加载
动态加载无需头文件 相关代码如下
void xxx()
{
QUiLoader loader;
QFile file(":/aaa.ui");
file.open(QFile::ReadOnly);
QWidget *w=new QWidget;
w=loader.load(&file);
file.close;
w->show;
}