Qt基礎 設計自動適應視窗大小
實際qt視窗程式的時候,為了方便和程式本身能自適應顯示裝置,我們一般都要把控制元件設計為可以隨視窗大小的改變而改變,在使用設計助手
設計的介面,預設是不能隨視窗大小改變而改變的,只需做一下簡單處理即可.一下是轉載前輩們的部落格.轉載地址:http://www.cnblogs.com/linmeng/archive/2012/07/05/2559259.html
在windows下的qt設計師中只需選擇: 窗體->垂直佈局 或者 窗體->水平佈局 就可以實現,在別的環境中可以用一下方法實現 仙人掌的程式碼: 在建構函式中: ui.setupUi(this);ui.centralWidget->setLayout(ui.topverticalLayout);
我們知道,通過Qt的各種Layout可以實現控制元件的自動佈局。
但是在使用Qt Designer建立的UI時,發現UI始終是設計時的樣子,無法隨著容器的放大縮小自適應地變化。
通過之前對ui的.h檔案進行分析,我們知道Qt在生成ui程式碼時,根據最外層的Layout自動新增一個了Widget:
/** 這個Widget在UI設計時是沒有的,是Qt為了方便組合其他的元件而且自動建立的。 Widget的名字是根據最外層的元件來的,這裡最外層是一個QVBoxLayout元件,故Widget 以VerticalLayoutWidget命名*/ QWidget *verticalLayoutWidget;
而我們在setupUi時,將 verticalLayoutWidget 指定為目標窗體的子控制元件,而 verticalLayoutWidget 的大小是已經固定了的,如下:
//建立myQtTestForm的Child Widget, verticalLayoutWidget = new QWidget(myQtTestForm); verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget")); verticalLayoutWidget->setGeometry(QRect(20, 20, 491, 311));
所以, verticalLayoutWidget 不會隨父視窗的放大縮小而變化。
解決辦法就是,把 verticalLayoutWidget 放在目標窗體的Layout中,程式碼如下:
//設定Ui ui.setupUi(this); //使Ui可自適應父視窗大小 QVBoxLayout* mainLayout = new QVBoxLayout; mainLayout->addWidget(ui.verticalLayoutWidget); setLayout(mainLayout);
好了,就這麼簡單!
手動寫程式碼,使用layout管理,轉載地址為:http://blog.csdn.net/xgbing/article/details/7764326
開發一個圖形介面應用程式,介面的佈局影響到介面的美觀。在設計一個介面之前,應該考慮到開發的介面可能給不用的使用者使用,而使用者的螢幕大小、縱橫比例、解析度可能不同,介面還可能是可縮放的,程式應該可以適應這些變化。
前面的程式中都是使用setGeometry()方法定位控制元件的位置,這個方法比較笨拙。試想如果控制元件很多,佈局這些控制元件需要編寫大量的程式碼。幸運的是,QT提供了更好的方法佈局控制元件。
常用的三種佈局方法:
(1)使用水平佈局類QHBoxLayout;
(2)使用垂直佈局類QVBoxLayout;
(3)使用網格佈局類QGridLayout。
這三種方法可以巢狀使用。
控制元件在佈局時可以先不指定父視窗,最後交由Layout統一指定。
示例:
- #include <QApplication>
- #include <QDialog>
- #include <QPushButton>
- #include <QLineEdit>
- #include <QLayout>
- #include <QLabel>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QDialog *mainWindow = new QDialog;
- QHBoxLayout *topLayout = new QHBoxLayout;
- QLabel *lbl = new QLabel(QWidget::tr("&Input:"), mainWindow);
- QLineEdit *lineEdt = new QLineEdit(mainWindow);
- lbl->setBuddy(lineEdt);
- topLayout->addWidget(lbl);
- topLayout->addWidget(lineEdt);
- QHBoxLayout *bomLayout = new QHBoxLayout;
- QPushButton *btn_ok = new QPushButton(QWidget::tr("OK"), mainWindow);\
- btn_ok->setDefault(true);
- QPushButton *btn_cancel = new QPushButton(QWidget::tr("Cancel"), mainWindow);
- bomLayout->addStretch();
- bomLayout->addWidget(btn_ok);
- bomLayout->addStretch();
- bomLayout->addWidget(btn_cancel);
- bomLayout->addStretch();
- QVBoxLayout *mainLayout = new QVBoxLayout;
- mainLayout->addLayout(topLayout);
- mainLayout->addLayout(bomLayout);
- mainWindow->setLayout(mainLayout);
- mainWindow->resize(300, 100);
- mainWindow->setWindowTitle(QWidget::tr("Qt Test"));
- mainWindow->show();
- return a.exec();
- }
編譯執行,介面如下:
在介面中,最外部是mainLayout,它的型別是垂直佈局類QVBoxLayout。它包含了兩個水平佈局類QHBoxLayout,分別是topLayout和bomLayout。
比起QHBoxLayout和HVBoxLayout, QGridLayout運用更加靈活。
QGridLayout的常用方法
(1)addWidget:
- //放置一個控制元件到一個單元格
- void addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
- //如果放置的控制元件超出一個單元格,則使用該方法
- void addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )
1)row:指放置控制元件的網格行號(行號從0開始);
2)colum:指放置控制元件的網格列號(從0開始);
3)alignment:對齊方式。
4)fromRow:指放置控制元件的起始網格行號;
5)fromColumn:指放置控制元件的起始網格列號;
6)rowSpan:指放置控制元件佔多少行;
7)columnSpan:指放置控制元件佔多少列。
(2)addLayout
- void addLayout ( QLayout * layout, int row, int column, Qt::Alignment alignment = 0 )
- void addLayout ( QLayout * layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )
引數與addWidget類似。
(3)setSpacing
- void QGridLayout::setSpacing ( int spacing )
設定控制元件水平和垂直之間的間隔。
示例:
- #include <QApplication>
- #include <QDialog>
- #include <QPushButton>
- #include <QLineEdit>
- #include <QLayout>
- #include <QLabel>
- #include <QTextEdit>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QDialog *mainWindow = new QDialog;
- QGridLayout *gridLayout = new QGridLayout;
- gridLayout->setColumnStretch(0, 1);
- gridLayout->setColumnStretch(1, 4);
- gridLayout->setColumnStretch(2, 1);
- gridLayout->setColumnStretch(3, 1);
- gridLayout->setColumnStretch(4, 4);
- gridLayout->setMargin(15);
- gridLayout->setColumnMinimumWidth(2, 15);
- QLabel *lbl1 = new QLabel(QWidget::tr("First Name:"));
- QLineEdit *edit1 = new QLineEdit;
- QLabel *lbl2 = new QLabel(QWidget::tr("Last Name:"));
- QLineEdit *edit2 = new QLineEdit;
- QLabel *lbl3 = new QLabel(QWidget::tr("Sex:"));
- QLineEdit *edit3 = new QLineEdit;
- QLabel *lbl4 = new QLabel(QWidget::tr("Birthday:"));
- QLineEdit *edit4 = new QLineEdit;
- QLabel *lbl5 = new QLabel(QWidget::tr("Address:"));
- QTextEdit *textEdt = new QTextEdit;
- gridLayout->addWidget(lbl1, 0, 0);
- gridLayout->addWidget(edit1, 0, 1);
- gridLayout->addWidget(lbl2, 0, 3);
- gridLayout->addWidget(edit2, 0, 4);
- gridLayout->addWidget(lbl3, 1, 0);
- gridLayout->addWidget(edit3, 1, 1);
- gridLayout->addWidget(lbl4, 1, 3);
- gridLayout->addWidget(edit4, 1, 4);
- gridLayout->addWidget(lbl5, 2, 0);
- gridLayout->addWidget(textEdt, 3, 0, 2, 5);
- mainWindow->setLayout(gridLayout);
- mainWindow->resize(400, 150);
- mainWindow->setWindowTitle(QWidget::tr("Qt Test"));
- mainWindow->show();
- return a.exec();
- }
編譯執行,介面如圖:
相關推薦
Qt基礎 設計自動適應視窗大小
實際qt視窗程式的時候,為了方便和程式本身能自適應顯示裝置,我們一般都要把控制元件設計為可以隨視窗大小的改變而改變,在使用設計助手 設計的介面,預設是不能隨視窗大小改變而改變的,只需做一下簡單處理即可.一下是轉載前輩們的部落格. 轉載地址:http://www.cn
easyui Layout 自動適應視窗大小
(2012-04-17注:easyui新版本layout已經有fit屬性,不用這麼麻煩) 一個小小的應用 一、使用asp.net 自帶的form; 二、用div代替asp.net 自帶的form; 開發工具:VS2008 框架:jquery-easyui-1.
Qt基礎——自適應視窗大小
我們知道,通過Qt的各種Layout可以實現控制元件的自動佈局。 但是在使用Qt Designer建立的UI時,發現UI始終是設計時的樣子,無法隨著容器的放大縮小自適應地變化。 通過之前對ui的.h檔案進行分析,我們知道Qt在生成ui程式碼時,根據最外層的Layout自動新增一個了Widget: /
qt 時鐘設計(隨介面大小變動自適應)
demo連結:https://download.csdn.net/download/weixin_39841821/10568854 一、 需求 a) 畫出一個圓形錶盤,包含三角形的時針、分針、秒針,以及上方的刻度,加上名字 b) 在窗體發生變化的時候,時鐘能夠根據窗體大小自動調整
QT程式自適應視窗大小
作為QT菜鳥的一員,總是容易遇到各種問題,然後歷經千辛萬苦解決它 問題: 我的程式需要在ARM板(Linux系統)上跑,也需要在PC(Windows上)跑,他們擁有不同大小的螢幕 在程式中佈局的介面能夠很好地適應視窗的大小變化,但是在UI設計中則不能實現 原因:在UI設計中沒有進
如何使圖片尺寸自動適應視窗,隨視窗大小變化而變化
程式碼如下: <img src="{{ url_for('static', filename=picture.piclink) }}" alt=""
Qt Creator 窗體控制元件自適應視窗大小布局
常見的軟體視窗大小改變(最大化、手動改變時)需要視窗的部件能夠自適應佈局,而在Qt的應用程式介面設計中,對於像我一樣的初學者如何實現視窗自適應調整還是要繞點彎路的。網上百度了很多,多數說的很含糊,還有很多是用程式實現的,既然已經有Qt Creator那麼高整合度的工具了,我還是傾向於直接在Qt Crea
Qt中窗體控制元件按照比例縮放,自適應視窗大小進行佈局
最近在做本科畢設,用到了Qt,無奈本人實在是太過於小白了,很多東西都進行了很久的探索,比如今天說到的窗體控制元件佈局...一把辛酸淚 首先就是建立一個GUI檔案,然後進行UI設計,這裡就只需要從左邊進行拖拽,這個很easy啦... 然後對其進行佈局
使背景圖片自動適應窗體大小
實現效果: 知識運用: 窗體的BackgroundImage和BackgroundImageLayout屬性 public virtual Image BackgroundImage{get; set;} //屬性值 一個Image影象 public virtu
easyUI Layout自適應視窗大小
</pre><p>關於頁面自適應效果</p><p><pre name="code" class="javascript">//監聽視窗大小變
QGraphicsView使影象自適應視窗大小
fd=QFileDialog(self) filePath=fd.getOpenFileName()[0] item=QGraphicsPixmapItem(QPixmap(filePath)) scene=QGraphicsScene() scene.addItem
選項卡Tabs 設定自適應視窗大小
$(window).resize(function() { //"_tabs" 為easyui-tabs的id $('#_tabs').tabs({ width : $
JQuery EasyUI Layout 在from佈局自適應視窗大小
在JQuery EasyUI中,如果直接在form上佈局時當視窗大小調整佈局不會改變,將佈局應用於body時中間隔著一個form,橫豎不好弄。 網上有多個解決方案,一般都是寫程式碼,在視窗大小改變時設定佈局。 經實驗,新版本的JQuery EasyUI中佈局可以採用以下方
使lightbox2 的彈出的大圖片自動適應螢幕大小
Resize the image to the screen: lightbox.js: preloader.onload = function() { $image.attr('src', _this.album[_this.currentImageIndex].link); $image.width
Echarts 如何設定多個圖表自適應視窗大小
最近做了Echarts的一些東西 碰到一個很實際的問題 那就是如何使Echarts圖表能自適應視窗的大小 由於我一個頁面里加載了四個圖 所以用一般的 window.onresize = myCha
一個頁面存在多個echarts圖形,resize失效,圖形自適應視窗大小
當一個頁面有兩個echarts圖形,想要頁面大小發生改變,重新繪製圖形如果還寫為 myChart.se
11three.js自適應視窗大小
新增一個監控事件 window.addEventListener image.png function onResize() {
window.onload and showModalDialog根據內容自動調整視窗大小
1 showModalDialog根據內容自動調整視窗大小 :在對話方塊的頁面中加入如下程式碼: window.onload = function() { if( document.body.scrollWidth > (window.screen.ava
echarts學習總結(二):一個頁面存在多個echarts圖形,圖形自適應視窗大小
如上圖所示一個頁面有兩個echarts圖形:散點圖和折線圖,如果還寫為 myChart.setOption(option); window.onresize = myChart.resize; 則只有
PyQt5 QTableWidget(表單控制元件)自適應視窗大小、欄位大小調整及佈局(一)
目錄 前言 前言 還好,我有C++ Qt Help(幫助文件)O(∩_∩)O哈哈~ 本文旨在介紹QTableWidget(表單控制元件)的自適應視窗大小、欄位大小調整及佈局。 用QtDesigner設計UI 1. 先用QtDe