1. 程式人生 > 實用技巧 >Qt 子視窗(自定義qdialog,qwidget)嵌入到父視窗,子視窗跟隨父視窗

Qt 子視窗(自定義qdialog,qwidget)嵌入到父視窗,子視窗跟隨父視窗

當我們自己定義了一個類繼承自QWdiget,並在其中實現了一些自定義的功能(比如QLabel移動到指定座標)

例如

class Demonstration_Widget : public QWidget

想要把這個視窗嵌入到主視窗中,與其他視窗一起在主視窗中構成主介面

只需要在這個子視窗的建構函式中新增:

1 setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
2 hide();

而在主GUI視窗的類中新增子視窗的標頭檔案,例如:

 1 #include <QMainWindow>
 2 #include "
demonstration_widget.h" 3 4 namespace Ui { 5 class MainWindow; 6 } 7 8 class MainWindow : public QMainWindow 9 { 10 Q_OBJECT 11 12 public: 13 explicit MainWindow(QWidget *parent = 0); 14 ~MainWindow(); 15 16 private: 17 Ui::MainWindow *ui; 18 19 Demonstration_Widget *w_demonstration;
20 };

接著在主介面對應類的建構函式中,建立子視窗物件,設定子視窗顯示位置並使其顯示即可。例如:

 1 MainWindow::MainWindow(QWidget *parent) :
 2     QMainWindow(parent),
 3     ui(new Ui::MainWindow)
 4 {
 5     ui->setupUi(this);
 6     w_demonstration = new Demonstration_Widget(this);
 7     w_demonstration->move(250,250);
 8     w_demonstration->show();
9 10 }

最後中main.cpp中顯示主介面,可以看到子視窗嵌入到了主介面的相應位置

 1 #include <QApplication>
 2 #include "mainwindow.h"
 3  
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7  
 8     MainWindow mainw;
 9     mainw.show();
10  
11     return a.exec();
12 }