使用QT可視化設計對話框詳細步驟與代碼

一、創建對話框基本步驟

  • 創建并初始化子窗口部件
  • 把子窗口部件放到布局中
  • 設置tab鍵順序
  • 建立信號-槽之間的連接
  • 實現對話框中的自定義槽

首先前面三步在這里是通過ui文件里面直接進行的,剩下兩步則是通過代碼來實現

二、項目創建詳細步驟

創建新項目

為項目命名

?

?為類起名并選擇基類為QDialog

【如果這里沒有選擇QDialog而是選擇默認的QMainWindow的話會導致后面運行的時候setupUi函數報錯】

三、ui可視化對話框界面設計實現詳細步驟

雙擊 gotocelldialog.ui文件打開設計界面,左側為工具欄,右側則是進行設計的界面,只需要將左側的部件拖拽到界面即可實現

先拖拽一個標簽、一個行編輯器、一個水平分隔符和兩個按鈕到界面上

然后修改Lable部件的text為——&Cell Location:

修改第一個按鈕的屬性,將其text改為——OK,其objectName改為——okButton,其enable屬性改為false,其default屬性改為——true

?

修改第二個按鈕的屬性,將其text改為——Cancel,其objectName改為——cancelButton

修改整個窗體的標題與名字——點擊空白部分,然后看屬性部分

到這里部件屬性設置完成

此時界面顯示如下:

接下來就是對部件進行綁定還有對布局進行設計

將lable部件與lineEdit部件綁定,點擊左上角“編輯”——選擇“Edit Buddies”——單擊Lable然后將紅色箭頭與lineEdit連接起來——點擊左上角“編輯”——選擇“Edit Widget”即可

對布局進行設計

同時選中label還有lineEdit——鼠標右鍵——布局——水平布局

同時選中下面三個部件——鼠標右鍵——布局——水平布局

選擇窗體中的空白——鼠標右鍵——布局——調整大小——調整成自己想要的大小——選擇窗體中空白——鼠標右鍵——布局——垂直布局

布局設計完成結果如下:

?

設置Tab鍵順序

點擊左上角“編輯”——選擇“Edit Tab Order”——根據所想順序進行選擇即可

四、對話框實現

①初始實現——使用在ui中設計的窗體、創建QDialog對象、將對象傳遞給窗體、運行

只需要在main.cpp文件內對代碼進行書寫

#include "gotocelldialog.h"#include <QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);//定義窗體、創建QDialog對象、將對象傳遞給窗體【對話框能展示,但功能沒有實現】Ui::GoToCellDialog ui;//定義該窗體QDialog *dialog=new QDialog;//創建一個QDialog對象ui.setupUi(dialog);//把QDialog對象傳遞給setupUi函數dialog->show()return a.exec();
}

此時會顯示前面所設計的界面,但是按鈕功能與行編輯器的限制都沒有實現

②進階實現——定義新類繼承Ui初始化的GoToCellDialog類還有QDialog并利用信號-槽實現功能

?gotocelldialog.h 代碼【新類定義】

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H#include<QDialog>
#include"ui_gotocelldialog.h"//創建一個新類,讓此類同時從QDialog和Ui::GoToCellDialog中繼承出來,并且實現前面所涉及的窗體中所需要實現的功能
class GoToCellDialog : public QDialog,public Ui::GoToCellDialog
{Q_OBJECTpublic:GoToCellDialog(QWidget *parent = nullptr);//構造函數~GoToCellDialog();//析構函數
private slots:void on_lineEdit_textChange();//實現對OK按鈕的啟用/禁用
private:Ui::GoToCellDialog *ui;
};
#endif // GOTOCELLDIALOG_H

gotocelldialog.cpp 代碼【信號與槽綁定與實現】

#include<QtGui>
#include "gotocelldialog.h"//構造函數的實現
GoToCellDialog::GoToCellDialog(QWidget *parent): QDialog(parent)
{setupUi(this);//初始化窗體//設置一個檢驗器來限制輸入的范圍  QRegExpValidator內置檢驗器后面帶一個正則表達式QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");//正則表達式//允許一個大寫/小寫字母,后面跟著一個范圍為1-9的數字,后面再跟一個0個、1個或者2個0-9的數字lineEdit->setValidator(new QRegExpValidator(regExp,this));//第一個connect已經通過setupUi自動建立了//因為setupUi()函數會自動將那些符合on_objectName_signalName()命名慣例的任意槽與其相應的objectName的signalName()信號連接到一起//connect(lineEdit,SIGNAL(textChange(const QString &)),this,SLOT(on_lineEdit_textChange()));//accept()槽是QDialog的,其可以將對話框返回的結果變量設置為QDialog::Accept(其值等于1)connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));//當點擊OK按鈕時,觸發accept()槽//reject()槽是QDialog的,其可以將對話框的值設置為QDialog::Reject(其值等于0)connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));//當點擊Cancel按鈕時,觸發reject()槽//可以利用對話框的結果變量判斷用戶是否單擊了OK按鈕
}//實現對OK按鈕的啟用/禁用
void GoToCellDialog::on_lineEdit_textChange(){//根據行編輯器中是否包含了有效的單元格位置坐標,從而實現對OK按鈕的啟用或者禁用//hasAcceptableInput()用于判斷行編輯器中內容的有效性  有效則禁用,無效則啟用okButton->setEnabled(lineEdit->hasAcceptableInput());
}GoToCellDialog::~GoToCellDialog()
{delete ui;
}

main.cpp 代碼

#include "gotocelldialog.h"#include <QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);//進階想法——定義新類繼承Ui初始化的類還有QDialog并利用信號-槽實現功能GoToCellDialog *dialog=new GoToCellDialog;dialog->show();return a.exec();
}

運行結果:

當行編輯器中的文字不符合輸入規定時不允許輸入且OK按鈕禁用;當行編輯器中內容符合輸入規定時OK按鈕啟用

?

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

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

相關文章

深度思考rpc框架面經系列之二

此篇總結是接上一篇做的&#xff0c;當然&#xff0c;獨立看也是可以的&#xff0c;這幾個系列講解的是rpc框架的不同方面 4 序列化和反序列化&#xff08;阿里一面&#xff09; 4.1 為什么要序列化呢&#xff0c;解決什么問題呢&#xff1f;序列化和反序列化也是要消耗一定性…

VScode如何設置中文教程

前言&#xff1a;打開VSCode軟件&#xff0c;可以看到剛剛安裝的VSCode軟件默認使用的是英文語言環境&#xff0c;但網上都是vscode中文界面教你怎么設置中文&#xff0c;可能不利于小白閱讀&#xff0c;所以重裝vscode&#xff0c;手摸手從英文變成中文。 設置為中文 打開VS…

CDH6.3.2搭建HIVE ON TEZ

參考 https://blog.csdn.net/ly8951677/article/details/124152987 ----配置hive運行引擎 在/etc/hive/conf/hive-site.xml中修改如下&#xff1a; hive.execution.engine mr–>tez hive.execution.engine 設為tez或者運行代碼的時候&#xff1a; set hive.execution.eng…

android app控制ros機器人五(百度地圖)

半吊子改安卓&#xff0c;新增了標簽頁&#xff0c;此標簽頁需要顯示百度地圖 按照官方教程注冊信息&#xff0c;得到訪問應用AK&#xff0c;步驟也可以參照下面csdn Android地圖SDK | 百度地圖API SDK 【Android】實現百度地圖顯示_賓有為的博客-CSDN博客 本人使用的是aar開…

區分多個鼠標的滾輪滾動消息

實現功能&#xff1a;電腦插了兩個或多個鼠標&#xff0c;程序中需要區分不同鼠標的滾輪滾動消息。 實現方式&#xff1a;直接上代碼&#xff0c;復制粘貼可用&#xff0c;具體處理邏輯可以根據實際需求進行修改和擴展&#xff0c;請注意&#xff0c;這段代碼是在Windows操作系…

Python 圖形界面框架TkInter(第八篇:理解pack布局)

前言 tkinter圖形用戶界面框架提供了3種布局方式&#xff0c;分別是 1、pack 2、grid 3、place 介紹下pack布局方式&#xff0c;這是我們最常用的布局方式&#xff0c;理解了pack布局&#xff0c;絕大多數需求都能滿足。 第一次使用pack&#xff08;&#xff09; import …

學習筆記整理-DOM-02-事件監聽

一、什么是"事件監聽" DOM允許書寫JavaScript代碼以讓HTML元素對事件作出反應什么是"事件": 用戶與網頁的交互動作當用戶點擊元素時當鼠標移動到元素上時當文本框的內容被改變時當鍵盤在文本框中被按下時當網頁已加載完畢時… “監聽”&#xff0c;顧名思義…

開學季電容筆怎么選?iPad第三方電容筆了解下

不少的學生黨開學必備清單里都少不了電容筆&#xff0c;可見其的重要性。自從蘋果發布了ipad的原裝電容筆以來&#xff0c;這款電容筆在目前市面上就一直很受歡迎&#xff0c;不過由于Apple Pencil的售價實在是太貴了&#xff0c;使得大部分人都買不起。于是&#xff0c;市面上…

leetcode做題筆記78子集

給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 思路一&#xff1a;回溯 void backtracking(int* nums, int numsSize, int** res, int* ret…

在 Linux 虛擬機上使用 Azure 自定義腳本擴展版本

參考 azure創建虛擬機,創建虛擬機注意入站端口規則開放80端口、 2.轉到資源&#xff0c;點擊擴展應用程序&#xff0c;創建存儲賬戶&#xff0c;創建容器&#xff0c;上傳文件&#xff0c;選擇文件&#xff0c;會自動執行部署。 apt-get update -y && apt-get insta…

ROS訂閱相機圖像消息,并將圖像保存為視頻幀

需求 需要編寫一個Python程序&#xff0c;訂閱電腦外接的深度相機發出的視頻消息&#xff0c;錄制視頻并逐幀保存為圖片到本地&#xff0c;用于采集制作數據集的圖片信息 運行環境 Ubuntu18.04 ROS Melodic Python2.7 Python程序 #!/usr/bin/env python # -*- coding: u…

Vue-day03 組件

1.組件機制 組件 (Component) 是 Vue.js 最強大的功能之一。組件可以擴展HTML元素&#xff0c;封裝可重用的代碼。在較高層面上&#xff0c;組件是自定義元素&#xff0c;Vue的編譯器為它添加特殊功能。在有些情況下&#xff0c;組件也可以表現為用is特性進行了擴展的原生 HTML…

chatgpt和xmind結合起來幫你制作精美的思維導圖

介紹 chatgpt和xmind結合起來幫你制作精美的思維導圖。 1.輸出Markdown格式 2.xmind導入.md文件

web集群學習:nginx+keepalived實現負載均衡高可用性

目錄 項目架構 一&#xff0c;環境介紹 二&#xff0c;項目部署 在Web服務器上配置Web測試頁面 nginx負載均衡配置 配置Nginx_Master 通過vrrp_script實現對集群資源的監控&#xff08;1>通過killall命令探測服務運行狀態&#xff09; 通過vrrp_script實現對集群資源…

div輸入框的文字超過指定行數用省略號表示css

實現效果&#xff1a;超過四行用省略號表示 實現方法&#xff1a; .text{overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 4; // 自定義行數-webkit-box-orient: vertical; }

Go和Java實現外觀模式

Go和Java實現外觀模式 下面我們通過一個構造各種形狀的案例來說明外觀模式的使用。 1、外觀模式 外觀模式隱藏系統的復雜性&#xff0c;并向客戶端提供了一個客戶端可以訪問系統的接口。這種類型的設計模式屬于結構型 模式&#xff0c;它向現有的系統添加一個接口&#xff…

【設計模式】代理模式

在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。 在代理模式中&#xff0c;我們創建具有現有對象的對象&#xff0c;以便向外界提供功能接口。 介紹 意圖&#xff1a;為其他對象提供一種代理以…

【面試問題】事務中執行了異步任務分發數據,由于事務未提交,導致異步任務無法執行

文章目錄 問題描述&#xff1a;解決辦法&#xff1a; 問題描述&#xff1a; OverrideTransactional(rollbackFor Exception.class)public ServiceResponse ctsqCallbackProcess(OaFlowRecord params) {// 查詢任務單數據// 更新任務單信息// 異步分發數據到CRMS系統}客戶數據分…

TX Text Control .NET Server for ASP.NET Crack

TX Text Control .NET Server for ASP.NET Crack TX Text Control.NET Server for ASP.NET是用于Web應用程序或服務的服務器端組件。它是一個完全可編程的ASP.NET文字處理引擎&#xff0c;提供了廣泛的文字處理功能。使用TX Text Control.NET Server&#xff0c;程序員可以開發…

react組件化開發詳解

React是一個流行的JavaScript庫&#xff0c;用于構建用戶界面&#xff0c;并且以組件化的方式進行開發。下面將詳解React組件化開發的概念和步驟&#xff1a; 組件化思維&#xff1a; 組件化開發是將復雜的用戶界面劃分為獨立、可重用的小部件&#xff08;組件&#xff09;。…