Qt实现界面的窗口的局部动态添加并布局
生活随笔
收集整理的這篇文章主要介紹了
Qt实现界面的窗口的局部动态添加并布局
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
此程序實現的是點擊界面的添加界面按鈕,新增加一個窗口,并實現窗口的布局,隨著窗口個數的在布局中的增加,窗口大小自動縮小。創建基于QT widget Application的應用程序,選擇基類QDialog,去掉Generate form前的勾,使用代碼創建控件,設置所添加窗口的最大行數為5行。
代碼如下:
main.cpp
dialog.h
#ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QGridLayout>class Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();public slots:void slot_btnClicked(); private:QGridLayout layout;QGridLayout layout1;QWidget *widget;uint16_t n;uint16_t row; }; #endif // DIALOG_Hdialog.cpp
#include "dialog.h" #include <QPushButton> #include <QMessageBox> #include <QDebug>/*問題描述:* 動態實現新增加界面的布局*/Dialog::Dialog(QWidget *parent): QDialog(parent) {resize(600,500); // setContentsMargins(2,2,2,2);//設置窗口內容到邊框的距離QPushButton *addBtn = new QPushButton(tr("增加界面"),this); // addBtn->move(5,5);//有布局的情況下不能再設置位置 // addBtn->setGeometry(0,0,120,40);widget = new QWidget(this); // widget->setGeometry(5,50,600,400);//有布局的情況下似乎沒有用widget->show();//非模態對話框widget->setObjectName("Parent");widget->setStyleSheet("QWidget#Parent{background-color:green;}");layout.setSpacing(15);//設置布局中控件之間的垂直距離layout.addWidget(addBtn,0,0,1,1);layout.addWidget(widget,1,0,10,10);//為了彼此之間有參照setLayout(&layout);connect(addBtn,&QPushButton::clicked,this,&Dialog::slot_btnClicked);n = 0;row = 0; }Dialog::~Dialog() { }void Dialog::slot_btnClicked()//沒有實現動態布局 {if(row == 5){qDebug()<<"不能再添加窗口了!";QMessageBox::information(this,tr("警告"),tr("不能再添加窗口了!"));return ;}QWidget *dlg = new QWidget(widget); // QDialog *dlg = new QDialog(widget);//QDialog是不被嵌入到父窗口部件的窗口,為頂級窗口dlg->show();dlg->setObjectName("child");//QWidget#Parent>dlg->setStyleSheet("QWidget#child{background-color:blue;}"); // dlg->setStyleSheet("QDialog#child{background-color:blue;}");layout1.addWidget(dlg,row+1,(int)n%4,1,1);//柵格布局沒有參照的情況下,先設置占一行一列n++;if(n%4 == 0){row++;}widget->setLayout(&layout1); }運行程序后,界面效果如下:
代碼中含有對一些函數理解的注釋,其中最關鍵的理解是兩點:
1.QDialog為頂級窗口,沒有父部件,不被嵌入到父部件中。
2.柵格布局中需要有所占行列的參考數。單一一個控件來使用柵格布局指定所占行列時,除一行一列外,無法實現期望效果,即:界面上只有一個按鈕,按鈕被放入柵格布局中,占3行2列,運行效果是將按鈕進行了水平拉伸,幾乎占據整個界面的長度。
在創建的項目的構造函數中加入如下代碼:
運行效果如下圖所示:
總結
以上是生活随笔為你收集整理的Qt实现界面的窗口的局部动态添加并布局的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信号槽绑定时出现未有匹配的connect
- 下一篇: java channel源码_Netty