Qt圖形界面編程入門(基本窗口及控件)

基本窗口類QWidget

QWidget是所有窗體部件的基類,例如對話框類,主窗體類,以及其他諸如按鈕,編輯框,標簽等等都是由QWidget派生得到,QWidget擁有的方法往往都可以在其他子類中使用。

窗體的幾何尺寸分為包含邊框和標題、不包含邊框和標題兩種。

以下是常用函數

(1)包括窗框(即整個窗口)的函數。

x(),y(),pos():獲取左上角坐標

frameGeometry():獲取窗體尺寸(返回一個矩形QRect)

move():移動窗體到某個位置。

(2)不包括窗體(即客戶區域)(返回一個矩形QRect)

width(),heigh():獲取客戶區寬度、高度

setGeometry():設置窗體在屏幕中的位置。

窗體幾何尺寸的設置和獲取

首先我們建立一個基于QWidget的無UI設計界面的Qt Widgets Application應用。

在main.cpp頭部文件添加

#include<QDebug>

?

?

然后,修改主函數main.cpp文件如下

?

?

#include "widget.h"
#include <QApplication>
#include<QDebug>
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();w.setGeometry(50,50,200,200);qDebug() << w.x() << " " << w.y();qDebug() << w.geometry().width() << " " << w.frameGeometry().width();qDebug() << w.geometry().height() << " " << w.frameGeometry().height();return a.exec();
}

保存后運行

運行上面的程序會顯示一個窗口,如圖

它的客戶區左上角距離屏幕左上角邊界均為50,客戶區的長和寬均為200

這里的(41,12)是窗體框架左上角的坐標,它在客戶區的左上角(50,50)的左上方。而顯示器左上角是原點。

setGeometry函數設置客戶區在屏幕上的位置及其寬度、高度。

窗口標題及大小控制

首先建立一個基于QWidget的有UI設計界面的Qt Widgets Application應用。

然后修改Widget.cpp文件的構造函數如下:

窗口控件類概覽

標簽

標簽(QLabel)一般用于顯示簡單的文本。例如:

QLabel *label = new QLabel(this);
label->setGemoetry(10,10,150,80);
label->setText("Label");
//設置文本對齊方式,多個參數用 | 分隔
label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

標簽文本對齊方式定義如下:

AlignTop:將文本添加到QLabel對象的上部

AlignButton:將文本添加到QLabel對象的下部

AlignLeft:沿著QLabel對象的左邊添加文本

AlignRight:沿著QLabel對象的右邊添加文本

AlignHCenter:將文本添加到QLabel對象水平中心的位置

AlignVCenter:將文本添加到QLabel對象的垂直中心位置

用標簽顯示位圖

第一步,建立一個基類位QWidget的應用

添加需要展示的圖片

第二步,修改main函數如下

#include "widget.h"
#include <QApplication>
#include <QLabel>
#include <QImage>
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;QLabel *pTag = new QLabel(&w);//路徑不同,圖片屬性不同,請自行修改路徑和屬性//QImage image("e:/img.png");pTag->setPixmap(QPixmap::fromImage(image));pTag->setGeometry(0,0,image.width(),image.height());w.show();return a.exec();

這個例子用QImage對象載入E盤根目錄下的png文件,再利用QPixmap::formImage靜態函數將png格式轉換為xpm格式,然后用setPixmap函數設置標簽位圖。

按鈕

對于普通按鈕而言,可設置圖標,文字,顯示狀態等。

按鈕的使用

第一步,建立一個基類為QDialog的應用,在創建過程中取消UI界面設計文件。

第二步,修改dialog.h文件如下

第三步,打開“新建”菜單,選擇Qt ->“Qt資源文件”,在工程項目中添加資源文件,可任意命名

第四步,在工程目錄中添加文件夾rc,然后將兩個圖標文件放入其中(在線制作ico圖標? http://www.bitbug.net/? )

第五步,在button.qrc項目上右擊,在彈出的菜單選擇“添加現有文件”,將rc目錄下的圖標分別添加到工程項目中。

第六步,修改dialog.cpp文件的Dialog類構造函數:

    resize(150,150);  //設置主窗體大小pushButton1 = new QPushButton(this);  // 新建按鈕QIcon icon1(":/rc/bitbug_favicon.ico");  // 定義圖標對象pushButton1->setIcon(icon1);  //  設置按鈕圖標pushButton1->setGeometry(20,20,70,40);pushButton2 = new QPushButton(this);QIcon icon2(":bitbug_favicon(1).ico");pushButton2->setIcon(icon2);pushButton2->setFlat(true); //  將按鈕設置為平面顯示pushButton2->setText("Open");  //  設置按鈕的文本信息pushButton2->setGeometry(20,70,70,40);

點擊運行后

單選按鈕、復選框

單選按鈕用于在眾多選項中選擇一項,復選框用于在眾多選項中同時選擇多項

單選按鈕,復選框的使用

第一步,建立一個基于QWidget類的有UI設計界面的應用程序。

第二步,在UI設計器中放入兩個復選框,兩個標簽,兩個單選按鈕

在本例中,修改單選按鈕和復選框的objectName和text屬性如下:

兩個單選按鈕的objectName改為RadioBtn1,RadioBtn2

兩個單選按鈕的文本test改為男,女

兩個復選框的objectName改為CheckBox1,CheckBox2

兩個復選框的文本test改為教師,學生

兩個標簽的objectName改為label,label_2

?

void Widget::on_RadioBtn1_clicked()
{   // "男"單選按鈕為選中狀態ui->RadioBtn1->setChecked(true);//label標簽顯示相應的內容ui->label->setText("你選中了男生");
}void Widget::on_RadioBtn2_clicked()
{// "女"單選按鈕為選中狀態ui->RadioBtn2->setChecked(true);//label標簽顯示相應的內容ui->label->setText("你選中了女生");
}void Widget::displayCheckBox()
{QString str; //定義字符串//使用條件語句判斷if(ui->CheckBox1->isChecked() && ui->CheckBox2->isChecked()){str = "你選中了教師!\n你選中了學生!";}else if(ui->CheckBox1->isChecked()){str +="你選中了教師!" ;}else if(ui->CheckBox2->isChecked()){str +="你選中了學生!";}//將str顯示到label_2標簽ui->label_2->setText(str);
}void Widget::on_CheckBox1_clicked()
{//調用自定義公有成員函數this->displayCheckBox();
}void Widget::on_CheckBox2_clicked()
{this->displayCheckBox();
}

先告一段落。下一篇實現一下組合框的使用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534301.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534301.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

背景se_盤點那些RPG手游中主角的背景故事,越悲情越強大

RPG游戲一直以代入感超強的游戲方式來吸引玩家&#xff0c;用超越現實的藝術手段把玩家帶入到虛擬的游戲世界&#xff0c;讓玩家擔任不同的社會角色來去經歷不同的虛擬故事&#xff0c;體驗多種人生經歷&#xff0c;想要扮演任何角色都是有可能的。當然在RPG游戲中也有好壞之分…

TensorFlow構建二維數據擬合模型(2)

變量的定義和使用 變量的定義與初始化 TensorFlow中&#xff0c;變量是一種特殊的張量&#xff0c;其值可以是一個任意類型的形狀的張量。 與其他張量不同&#xff0c;變量存在于單個回話調用的上下文之外&#xff0c;主要作用是保存和更新模型中的參數。 聲明變量通常使用…

c++用牛頓法開多次根_望遠鏡的歷史之三:大神出世,改變望遠鏡歷史的竟然是牛頓...

上次我們說到格里高利望遠鏡有點畫蛇添足&#xff0c;那么格里高利望遠鏡添了什么呢&#xff1f;格里高利望遠鏡格里高利望遠鏡觀測的圖像都是正立的&#xff0c;這就意味著要采用多個凹面反射鏡&#xff0c;而當時凹面反射鏡磨制不易&#xff0c;無論是多大的科學家都要親自動…

python浮點型精度損失問題_解決float型數據精度損失問題

問題&#xff1a;浮點型數據存儲方式會導致數據精度損失&#xff0c;增大計算誤差。float fval 0.45;  // 單步調試發現其真實值為&#xff1a;0.449999988double dval 0.45; // 單步調試發現其真實值為&#xff1a;0.45000000000000001當很多個這樣的單精度浮點型數據進行…

Linux配置本地yum源(RHEL8)

https://www.cnblogs.com/itwangqiang/p/13391401.html

如何把照片正面變成反面_各國簽證照片要求大全 (含模板)

對于不是很熟悉簽證的小伙伴來說&#xff0c;面對全球那么多國家的簽證而且每張簽證照片的規格不同為此我們為您整理了各國簽證照片要求大全 東南亞國家的簽證照要求基本相同&#xff0c;就以泰國為例&#xff0c;告訴大家簽證照的注意事項。“泰國&#xff0c;新加坡&#xff…

TensorFlow實驗(3)

模型的保存與恢復 我們來簡單實現一下模型的保存與恢復 訓練完TensorFlow模型后&#xff0c;可將其保存為文件&#xff0c;以便于預測新數據時直接加載使用。 TensorFlow模型主要包含網絡的設計或者圖以及已經訓練好的網絡參數的值。 TensorFlow提供的tf.train.Saver()函數…

ad域 禁用賬號_IST-AD域信息同步平臺來襲

IST的AD域信息同步系統是能幫助域管理員簡化日常的一些管理工作&#xff0c;可以讓AD域系統與其他的業務系統進行用戶信息同步&#xff0c;實現自動的新舊用戶帳戶信息的同步修改、組織架構同步調整&#xff0c;并有簡單易操作的配置頁面系統與操作日志查詢等。通過ODBC、Web S…

Linux基礎(firewalld防火墻配置管理工具的圖形用戶界面)

firewall-config的界面如圖所示 我們先將當前區域中請求http服務的流量設置為允許&#xff0c;但僅限當前生效。具體配置如圖 嘗試添加一條防火墻策略規則&#xff0c;使其放行訪問8080-8088端口&#xff08;TCP協議&#xff09;的流量&#xff0c;并將其設置為永久生效&#x…

ios 請求失敗封裝_vue_axios請求封裝、異常攔截統一處理

1、前端網絡請求封裝、異常統一處理vue中采用axios處理網絡請求&#xff0c;避免請求接口重復代碼&#xff0c;以及各種網絡情況造成的異常情況的判斷&#xff0c;采用axios請求封裝和異常攔截操作&#xff1b;axios 請求封裝// 引入axios文件包import axios from axios// POST…

Linux基礎(使用ssh服務管理遠程主機1)

配置網絡參數 使用nmtui命令配置網絡參數&#xff0c;以及通過nmcli命令查看網絡信息并管理網絡會話服務。 執行nmtui命令運行網絡配置工具 進入主界面 選中編輯連接并按下回車鍵 選中要編輯的網卡名稱&#xff0c;然后按下Edit&#xff08;編輯&#xff09;按鈕 把網絡IPv4 …

聯想g510升級方案_聯想智慧中國行,聚焦第一古城,助力企業智能升級

12月29日&#xff0c;聯想智慧中國行“一起聯想 生態綻放”One Lenovo融合品鑒會邢臺站盛大啟幕&#xff0c;現場近70位河北合作伙伴到場參會&#xff0c;共同探討智能時代帶來的多重挑戰和迎戰機遇。“聯想智慧中國行”是聯想致力于推動中國行業智能化升級舉辦的系列活動&…

軟件工程(總體設計②設計原理)

設計原理 模塊化 模塊是由邊界元素限定的相鄰程序元素的序列&#xff0c;而且有一個總體標識符代表它。 按照模塊的定義&#xff0c;過程、函數、子程序和宏&#xff0c;都可作為模塊。 面向對象方法學中的對象是模塊&#xff0c;對象內的方法也是模塊。模塊是構成程序的基…

TensorFlow構建二維數據擬合模型(3)

占位符與數據喂入機制 placeholder是TensorFlow提供的占位符節點&#xff0c;由tf.placeholder()函數創建&#xff0c;其實質上也是一種變量。占位符沒有初始值&#xff0c;只會分配必要的內存&#xff0c;其值由會話中用戶調用的run()函數傳遞。 占位符聲明的方法如表 函數…

合作開發過程產生的專利_被起訴專利侵權怎么辦?專利律師給你出招!

隨著國內企業專利申請量的增加及專利保護意識的逐步提升&#xff0c;專利侵權訴訟作為常用的商業競爭手段和策略&#xff0c;其數量也隨之呈逐年遞增之勢。考慮到目前國內專利數量較多&#xff0c;且很多專利技術互有交叉&#xff0c;因此在進行產品研發時即使未借鑒他人產品&a…

idea怎么設置代碼提示不區分大小寫_IntelliJ IDEA 這樣設置動圖,棒極了!

轉自&#xff1a;IntelliJ-IDEA-Tutorial/Judas.n鏈接&#xff1a;http://suo.im/6sHdelIntelliJ IDEA 有很多人性化的設置我們必須單獨拿出來講解&#xff0c;也因為這些人性化的設置讓我們這些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它。推薦設置IntelliJ IDEA 的代碼…

linux課堂筆記(1)

一、linux特點 1.源代碼開發&#xff1a; *.c *.h 可二次開發 2.安全&#xff1a;可檢測安全性 3.穩定&#xff1a;共享內存 內存沖突&#xff08;Windows&#xff0c;內存沖突&#xff0c;藍屏死機&#xff09; 4.網絡服務&#xff1a;server&#xff08;WWW&#xf…

表字段順序有何影響_「品味保定」炸烹蝦段乾隆贊 百年保定柔雅香

【引文】上溯先賢堯帝&#xff0c;保定傳承已逾千載。燕趙之地、畿輔之疆、北控三關、南通九省、翅衛京師說的就是古城保定。千百年來&#xff0c;古城保定形成了獨具特色的飲食文化&#xff0c;精致氣派的直隸官府菜就是這種文化的結晶。品百年保定酒&#xff0c;嘗直隸官府菜…

linux課堂筆記(2)

linux安裝 1&#xff0c;虛擬機&#xff1a;VMware12 &#xff08;1&#xff09;注冊&#xff1a;商業軟件&#xff08;集成序列號&#xff0c;注冊機&#xff08;根據加密算法生成序列號&#xff09;&#xff0c;文本文件&#xff08;記錄序列號&#xff09;&#xff09; &…

testufo測試刷新率測試_上手體驗微星電競顯示器PAG301CR:200Hz高刷新率只是它的小亮點...

電子競技行業高速發展&#xff0c;逐漸成為體育產業版圖中重要的一塊,產業鏈也在不斷完善&#xff0c;人們對于電子競技的認識也是越來越深刻&#xff0c;同時越來越多的人加入了電子競技行列中&#xff0c;但是電競游戲除了水平外&#xff0c;設備同樣也尤其重要&#xff0c;特…