在對一個窗口進行操作的時候,經常需要打開其他窗口
其實用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: