在对一个窗口进行操作的时候,经常需要打开其他窗口
其实用Qt设计师和QUiLoader就可以很简单的实现这个功能,下面以一个例子简单介绍一下:
1、新建一个窗口,窗口具有两个PushButton,New按钮可以新建一个窗口,Ok按钮退出当前窗口
2、新建一个窗口,窗口只有一个ok按钮,此窗口计划为第一个窗口点击New按钮生成
3、connect(new按钮单击信号 --> 打开new window窗口)
UILoader::UILoader(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
connect(ui.newButton,SIGNAL(clicked()),this,SLOT(newWindow()));
}
UILoader::~UILoader()
{
}
void UILoader::newWindow()
{
QUiLoader lad;
QFile f("new Window.ui");
QWidget *wid = lad.load(&f);
if (NULL != wid)
{
wid->show();
}
}
private slots:
void newWindow();
代码很简单,信号-->槽,这里的槽在当前class声明和实现
这里使用了QUiLoader和QFile,关于这两个class,可以使用Qt助手,可以方便看到其用法和所需头文件,这里就不再介绍了:
编译后运行:
如果需要使用动态对话框中的子部件,可以使用QObject::findChild<T>接口,比如我这个例子想访问新窗口的QLabel,将文本改变为"Hello World",可以这样实现:
QLabel* label = wid->findChild<QLabel*>("label");
if (NULL != label)
{
label->setText("Hello World");
}
findChild接口需要QLabel的名称即可
Run: