摘要:該組件有兩個(gè)版本,用于顯示整數(shù)與單精度浮點(diǎn)數(shù),則是雙精度浮點(diǎn)數(shù),有兩個(gè)特殊參數(shù),參數(shù)是在前方加入特殊符號(hào),而則是在后方加入特殊符號(hào)。
QT 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用QT可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在QT中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率。
目前,QT開發(fā)中常用的基礎(chǔ)組件有以下幾種:
如上方列表中提到的的組件,就是在開發(fā)中經(jīng)常被使用的,這些組件我將通過(guò)一個(gè)個(gè)小案例,幫助大家理解組件的應(yīng)用方式與應(yīng)用場(chǎng)景。
PushButton 按鈕組件: 在QT中任何組件都可以用兩種創(chuàng)建方式,我們可以通過(guò)使用new
關(guān)鍵字動(dòng)態(tài)創(chuàng)建按鈕,也可以使用QT的圖形化工具自動(dòng)生成。
首先我們通過(guò)命令行的方式生成幾個(gè)按鈕,導(dǎo)入QPushButton
包,然后定義如下代碼,通過(guò)調(diào)用connect()
可實(shí)現(xiàn)對(duì)特定按鈕賦予特定的函數(shù)事件。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include // 設(shè)置函數(shù),用于綁定事件void Print(){ std::cout << "hello lyshark" << std::endl;}MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // 創(chuàng)建[退出]按鈕 QPushButton * btn = new QPushButton; // 創(chuàng)建一個(gè)按鈕 // btn->show(); // 用頂層方法彈出按鈕 btn->setParent(this); // 設(shè)置父窗體(將btn內(nèi)嵌到主窗體中) btn->setText("退出"); // 設(shè)置按鈕text顯示 btn->move(100,200); // 移動(dòng)按鈕位置 btn->resize(100,50); // 設(shè)置按鈕大小 btn->setEnabled(true); // 設(shè)置是否可被點(diǎn)擊 // 創(chuàng)建[觸發(fā)信號(hào)]按鈕 QPushButton * btn2 = new QPushButton("觸發(fā)信號(hào)",this); btn2->setParent(this); btn2->move(100,100); btn2->resize(100,50); // 設(shè)置主窗體常用屬性 this->resize(500,400); // 重置窗口大小,調(diào)整主窗口大小 this->setWindowTitle("我的窗體"); // 重置主窗體的名字 this->setFixedSize(1024,300); // 固定窗體大小(不讓其修改) // this->showFullScreen(); // 設(shè)置窗體全屏顯示 // 設(shè)置主窗體特殊屬性 // setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); // 隱藏標(biāo)題欄 // 為按鈕綁定事件 connect(信號(hào)的發(fā)送者,發(fā)送的信號(hào),信號(hào)的接受者,處理的函數(shù)(槽函數(shù))) connect(btn,&QPushButton::clicked,this,&QWidget::close); // 將窗體中的 [觸發(fā)信號(hào)] 按鈕,連接到Print函數(shù)中. connect(btn2,&QPushButton::clicked,this,&Print);}// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::~MainWindow(){ delete ui;}
LineEdit 單行輸入組件: 單行輸入框LineEdit()
組件用來(lái)輸入一行文本內(nèi)容,GroupBox()
組件用來(lái)實(shí)現(xiàn)分組,QString
類是String類的二次封裝版,通過(guò)兩者配合實(shí)現(xiàn)兩個(gè)簡(jiǎn)單的數(shù)值轉(zhuǎn)換器。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // 設(shè)置計(jì)算和編輯框不可修改 ui->NumberSum->setEnabled(false); ui->lineEdit_hex->setEnabled(false); ui->lineEdit_bin->setEnabled(false); // 設(shè)置為密碼輸入 ui->NumberSum->setEchoMode(QLineEdit::Password);}MainWindow::~MainWindow(){ delete ui;}// By : LyShark// https://www.cnblogs.com/lyshark// 當(dāng)點(diǎn)擊計(jì)算按鈕后完成計(jì)算void MainWindow::on_pushButton_clicked(){ // 得到兩個(gè)編輯框的數(shù)據(jù) QString string_total; QString Number_One = ui->numberA->text(); QString Number_Two = ui->NumberB->text(); if(Number_One.length() == 0 || Number_Two.length() == 0) { ui->label_3->setText("參數(shù)不能為空"); } else { // 類型轉(zhuǎn)換并賦值 int number_int = Number_One.toInt(); float number_float = Number_Two.toFloat(); // 計(jì)算結(jié)果并放入到第三個(gè)編輯框中 float total = number_int * number_float; string_total = string_total.sprintf("%.2f",total); ui->NumberSum->setText(string_total); }}// 當(dāng)點(diǎn)擊進(jìn)制轉(zhuǎn)換按鈕后觸發(fā)事件void MainWindow::on_pushButton_2_clicked(){ QString str = ui->lineEdit->text(); int value = str.toUInt(); // 轉(zhuǎn)十六進(jìn)制 str = str.setNum(value,16); // 轉(zhuǎn)為16進(jìn)制 str = str.toUpper(); // 變?yōu)榇髮? ui->lineEdit_hex->setText(str); // 設(shè)置hex編輯框 // 轉(zhuǎn)二進(jìn)制 str = str.setNum(value,2); // 第一種方式轉(zhuǎn)換 str = QString::number(value,2); // 第二種方式轉(zhuǎn)換 ui->lineEdit_bin->setText(str); // 設(shè)置bin編輯框}
如上我們學(xué)習(xí)總結(jié)了按鈕組件與編輯框組件的使用,這兩個(gè)組件組合起來(lái)可實(shí)現(xiàn)一個(gè)簡(jiǎn)單地頁(yè)面登錄驗(yàn)證界面,代碼如下:
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include #include QString m_user="admin"; // 初始化用戶名QString m_pswd="12345"; // 初始化密碼int m_tryCount=0; // 試錯(cuò)次數(shù)// 字符串MD5算法加密QString MainWindow::encrypt(const QString &str){ QByteArray btArray; btArray.append(str); // 加入原始字符串 QCryptographicHash hash(QCryptographicHash::Md5); // Md5加密算法 hash.addData(btArray); // 添加數(shù)據(jù)到加密哈希值 QByteArray resultArray =hash.result(); // 返回最終的哈希值 QString md5 =resultArray.toHex(); // 轉(zhuǎn)換為16進(jìn)制字符串 return md5;}// 讀取用戶名密碼void MainWindow::ReadString(){ QString organization="UserDataBase"; // 注冊(cè)表 QString appName="onley"; // HKEY_CURRENT_USER/Software/UserDataBase/onley QSettings settings(organization,appName); // 創(chuàng)建key-value bool saved=settings.value("saved",false).toBool(); // 讀取 saved鍵的值 m_user=settings.value("Username", "admin").toString(); // 讀取 Username 鍵的值,缺省為admin QString defaultPSWD=encrypt("12345"); // 缺省密碼 12345 加密后的數(shù)據(jù) m_pswd=settings.value("PSWD",defaultPSWD).toString(); // 讀取PSWD鍵的值 if (saved) { ui->lineEdit_Username->setText(m_user); } ui->checkBox->setChecked(saved);}// 保存用戶名密碼設(shè)置void MainWindow::WriteString(){ QSettings settings("UserDataBase","onley"); // 注冊(cè)表鍵組 settings.setValue("Username",m_user); // 用戶名 settings.setValue("PSWD",m_pswd); // 經(jīng)過(guò)加密的密碼 settings.setValue("saved",ui->checkBox->isChecked());}// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); setFixedSize(this->width(), this->height()); // 窗口不可調(diào)節(jié) ui->lineEdit_Password->setEchoMode(QLineEdit::Password); // 密碼輸入 ReadString();}MainWindow::~MainWindow(){ delete ui;}// loginvoid MainWindow::on_pushButton_clicked(){ QString user=ui->lineEdit_Username->text().trimmed();//輸入用戶名 QString pswd=ui->lineEdit_Password->text().trimmed(); //輸入密碼 QString encrptPSWD=encrypt(pswd); //對(duì)輸入密碼進(jìn)行加密 if ((user==m_user)&&(encrptPSWD==m_pswd)) //如果用戶名和密碼正確 { WriteString(); QMessageBox::critical(this,"成功","已登錄"); } else { m_tryCount++; //錯(cuò)誤次數(shù) if (m_tryCount>3) { QMessageBox::critical(this, "錯(cuò)誤", "輸入錯(cuò)誤次數(shù)太多,強(qiáng)行退出"); this->close(); } else { QMessageBox::warning(this, "錯(cuò)誤提示", "用戶名或密碼錯(cuò)誤"); } }}
SpinBox 數(shù)值組件: 該控件主要用于整數(shù)或浮點(diǎn)數(shù)的計(jì)數(shù)顯示,與普通的LineEdit不同,該組件可以在前后增加特殊符號(hào)并提供了上下幅度的調(diào)整按鈕,靈活性更強(qiáng)。
該組件有兩個(gè)版本,SpinBox()
用于顯示整數(shù)與單精度浮點(diǎn)數(shù),DoubleSpinBox()
則是雙精度浮點(diǎn)數(shù),SpinBox有兩個(gè)特殊參數(shù),prefix
參數(shù)是在前方加入特殊符號(hào),而suffix
則是在后方加入特殊符號(hào)。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->doubleSpinBox->setEnabled(false);}MainWindow::~MainWindow(){ delete ui;}// By : LyShark// https://www.cnblogs.com/lyshark// 實(shí)現(xiàn)精度計(jì)算功能void MainWindow::on_pushButton_3_clicked(){ int x = ui->spinBox->value(); int y = ui->spinBox_2->value(); double total = x+y; ui->doubleSpinBox->setValue(total); // 設(shè)置SpinBox數(shù)值(設(shè)置時(shí)無(wú)需轉(zhuǎn)換) QString label_value = ui->label_10->text(); // 獲取字符串 ui->label_10->setNum(total); // 設(shè)置label標(biāo)簽為數(shù)字}
我們繼續(xù)在SpinBox的基礎(chǔ)上改進(jìn),如上代碼中每次都需要點(diǎn)擊計(jì)算按鈕才能出結(jié)果,此時(shí)我們需求是實(shí)現(xiàn)當(dāng)SpinBox
中的參數(shù)發(fā)生變化時(shí)自定的完成計(jì)算,這里就需要用到信號(hào)和槽了,當(dāng)SpinBox被修改后,自動(dòng)觸發(fā)計(jì)算信號(hào)實(shí)現(xiàn)計(jì)算。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->doubleSpinBox->setEnabled(false); // 將數(shù)量和單價(jià)兩個(gè)SpinBox的valueChanged()信號(hào)與on_pushButton_clicked()槽關(guān)聯(lián) // 只要spinBox中的內(nèi)容發(fā)生變化,則立即觸發(fā)按鈕完成計(jì)算 QObject::connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(on_pushButton_clicked())); QObject::connect(ui->spinBox_2,SIGNAL(valueChanged(int)),this,SLOT(on_pushButton_clicked())); QObject::connect(ui->doubleSpinBox,SIGNAL(valueChanged(double)),this,SLOT(on_pushButton_clicked()));}// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::~MainWindow(){ delete ui;}// 實(shí)現(xiàn)精度計(jì)算功能void MainWindow::on_pushButton_clicked(){ int x = ui->spinBox->value(); int y = ui->spinBox_2->value(); double total = x+y; ui->doubleSpinBox->setValue(total); // 設(shè)置SpinBox數(shù)值(設(shè)置時(shí)無(wú)需轉(zhuǎn)換) QString label_value = ui->label_10->text(); // 獲取字符串 ui->label_10->setNum(total); // 設(shè)置label標(biāo)簽為數(shù)字}
HorizontalSlider 滑塊條組件: 根據(jù)上面的SpinBox信號(hào)與槽函數(shù)的綁定,我們還可以將其綁定到滑塊條組件上,如下代碼實(shí)現(xiàn)了,當(dāng)用戶改變滑塊條時(shí),右側(cè)的textEdit
的顏色也會(huì)發(fā)生相應(yīng)的改變。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // ---------------------------------------------------------------------------------- // 將 SliderGreen,SliderBlue,SliderAlpha 與第一個(gè)滑塊條 SliderRead 關(guān)聯(lián)起來(lái) // 實(shí)現(xiàn)效果為,當(dāng)其他三個(gè)選擇條數(shù)值改變時(shí),同樣會(huì)觸發(fā)on_SliderRed_valueChanged槽函數(shù) QObject::connect(ui->SliderRed,SIGNAL(valueChanged(int)),this,SLOT(on_SliderRed_valueChanged(int))); QObject::connect(ui->SliderGreen,SIGNAL(valueChanged(int)),this,SLOT(on_SliderRed_valueChanged(int))); QObject::connect(ui->SliderBlue,SIGNAL(valueChanged(int)),this,SLOT(on_SliderRed_valueChanged(int))); QObject::connect(ui->SliderAlpha,SIGNAL(valueChanged(int)),this,SLOT(on_SliderRed_valueChanged(int)));}MainWindow::~MainWindow(){ delete ui;}// By : LyShark// https://www.cnblogs.com/lyshark// 當(dāng)拖動(dòng)SliderRed滑塊條時(shí)設(shè)置TextEdit底色void MainWindow::on_SliderRed_valueChanged(int value){ Q_UNUSED(value); QColor color; int R=ui->SliderRed->value(); // 讀取SliderRed的當(dāng)前值 int G=ui->SliderGreen->value(); // 讀取 SliderGreen 的當(dāng)前值 int B=ui->SliderBlue->value(); // 讀取 SliderBlue 的當(dāng)前值 int alpha=ui->SliderAlpha->value();// 讀取 SliderAlpha 的當(dāng)前值 color.setRgb(R,G,B,alpha); // 使用QColor的setRgb()函數(shù)獲得顏色 QPalette pal=ui->textEdit->palette(); // 獲取textEdit原有的 palette pal.setColor(QPalette::Base,color); // 設(shè)置palette的基色(即背景色) ui->textEdit->setPalette(pal); // 設(shè)置為textEdit的palette,改變textEdit的底色}
數(shù)碼表與LCD屏幕: 這是兩個(gè)比較有趣的組件,如下布局中圓形的是dial
組件,其右側(cè)則是一個(gè)LCD Number
組件,兩者可以靈活的結(jié)合在一起使用,當(dāng)撥動(dòng)齒輪時(shí)自動(dòng)影響LCD數(shù)碼屏幕的顯示。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include #include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::~MainWindow(){ delete ui;}// 當(dāng)圓形選擇框數(shù)值改變時(shí)設(shè)置數(shù)碼表顯示void MainWindow::on_dial_valueChanged(int value){ ui->LCDDisplay->display(value);}// 選中時(shí)設(shè)置為十進(jìn)制顯示void MainWindow::on_radioBtnDec_clicked(){ ui->LCDDisplay->setDigitCount(3); // 設(shè)置位數(shù) ui->LCDDisplay->setDecMode(); // 十進(jìn)制}// 選中設(shè)置為二進(jìn)制顯示void MainWindow::on_radioBtnBin_clicked(){ ui->LCDDisplay->setDigitCount(8); ui->LCDDisplay->setBinMode();}// 選中設(shè)置為八進(jìn)制顯示void MainWindow::on_radioBtnOct_clicked(){ ui->LCDDisplay->setDigitCount(5); ui->LCDDisplay->setOctMode();}// 選中設(shè)置為十六進(jìn)制顯示void MainWindow::on_radioBtnHex_clicked(){ ui->LCDDisplay->setDigitCount(3); ui->LCDDisplay->setHexMode();}
CheckBox 多選框: 多選框CheckBox
組件也是最常用的組件,多選框支持三態(tài)選擇,選中半選中和未選中狀態(tài)。
#include "mainwindow.h"#include "ui_mainwindow.h"http:// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); ui->checkBox->setTristate(); // 啟用三態(tài)選擇框 ui->checkBox->setEnabled(true); // 設(shè)置為可選狀態(tài)}MainWindow::~MainWindow(){ delete ui;}// 三態(tài)選擇框狀態(tài)void MainWindow::on_checkBox_stateChanged(int state){ // 選中狀態(tài) if (state == Qt::Checked) { ui->checkBox->setText("選中"); } // 半選狀態(tài) else if(state == Qt::PartiallyChecked) { ui->checkBox->setText("半選"); } // 未選中 else { ui->checkBox->setText("未選中"); }}// 設(shè)置取消選中void MainWindow::on_pushButton_clicked(){ int check = ui->checkBox->isCheckable(); if(check == 1) { ui->checkBox->setChecked(false); }}// 關(guān)聯(lián)式多選框void MainWindow::on_checkBox_master_stateChanged(int state){ // 選中所有子框 if(state == Qt::Checked) { ui->checkBox_sub_a->setChecked(true); ui->checkBox_sub_b->setChecked(true); } // 取消子框全選狀態(tài) if(state == Qt::Unchecked) { ui->checkBox_sub_a->setChecked(false); ui->checkBox_sub_b->setChecked(false); }}
ComBox 下拉框組件: 該組件提供了下拉列表供用戶選擇,ComBox組件除了可以顯示下拉列表外,每個(gè)項(xiàng)還可以關(guān)聯(lián)一個(gè)QVariant類型的變量用于存儲(chǔ)不可見數(shù)據(jù)。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include // 定義為全局變量QMap City_Zone;QMap> map;QList tmp;// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); // ----------------------------------------------------------------- // 循環(huán)方式添加元素 ui->comboBox_main->clear(); QIcon icon; icon.addFile(":/image/1.ico"); for(int x=0;x<10;x++) { ui->comboBox_main->addItem(icon,QString::asprintf("元素_%d",x)); } // ----------------------------------------------------------------- // 批量添加combox元素 ui->comboBox_main->clear(); QStringList str; str << "北京" << "上海" << "廣州"; ui->comboBox_main->addItems(str); ui->comboBox_main->setItemIcon(0,QIcon(":/image/1.ico")); ui->comboBox_main->setItemIcon(1,QIcon(":/image/2.ico")); ui->comboBox_main->setItemIcon(2,QIcon(":/image/3.ico")); // ----------------------------------------------------------------- // 實(shí)現(xiàn)combox聯(lián)動(dòng)效果 ui->comboBox_main->clear(); City_Zone.insert("請(qǐng)選擇",0); City_Zone.insert("北京",1); City_Zone.insert("上海",2); City_Zone.insert("廣州",3); // 循環(huán)填充一級(jí)菜單 ui->comboBox_main->clear(); foreach(const QString &str,City_Zone.keys()) { ui->comboBox_main->addItem(QIcon(":/image/1.ico"),str,City_Zone.value(str)); } // ----------------------------------------------------------------- // 插入二級(jí)菜單 tmp.clear(); tmp << "大興區(qū)" << "昌平區(qū)" << "東城區(qū)"; map["北京"] = tmp; tmp.clear(); tmp << "黃浦區(qū)" << "徐匯區(qū)" << "長(zhǎng)寧區(qū)" << "楊浦區(qū)"; map["上海"] = tmp; tmp.clear(); tmp << "荔灣區(qū)" << "越秀區(qū)"; map["廣州"] = tmp; // 設(shè)置默認(rèn)選擇第三個(gè) ui->comboBox_main->setCurrentIndex(3);}MainWindow::~MainWindow(){ delete ui;}// 獲取當(dāng)前選中的兩級(jí)菜單內(nèi)容void MainWindow::on_pushButton_clicked(){ QString one = ui->comboBox_main->currentText(); QString two = ui->comboBox_submain->currentText(); std::cout << one.toStdString().data() << " | " << two.toStdString().data() << std::endl;}// 當(dāng)主ComBox被選擇時(shí),自動(dòng)的填充第2個(gè)ComBox中的數(shù)據(jù).void MainWindow::on_comboBox_main_currentTextChanged(const QString &arg1){ ui->comboBox_submain->clear(); QList qtmp; qtmp = map.value(arg1); for(int x=0;xcomboBox_submain->addItem(QIcon(":/image/2.ico"),qtmp[x]); }}
ProgressBar 進(jìn)度條與定時(shí)器: 進(jìn)度條ProgressBar
組件通常會(huì)結(jié)合QTimer
定時(shí)器組件共同使用,首先我們需要設(shè)置一個(gè)時(shí)鐘周期,定時(shí)器每經(jīng)過(guò)一定的時(shí)間周期則執(zhí)行對(duì)變量或進(jìn)度條的遞增操作,由此實(shí)現(xiàn)進(jìn)度條動(dòng)態(tài)輸出效果。
#include "mainwindow.h"#include "ui_mainwindow.h"#include QTimer *my_timer;// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // 初始化進(jìn)度條數(shù)值 ui->progressBar->setValue(0); ui->progressBar_2->setValue(100); // 聲明定時(shí)器 my_timer = new QTimer(this); // 綁定一個(gè)匿名函數(shù) connect(my_timer,&QTimer::timeout,[=]{ static int x = 0; // 判斷是否到達(dá)了進(jìn)度條的最大值 if(x != 100) { x++; ui->progressBar->setValue(x); ui->progressBar_2->setValue(int(100-x)); } else { x=0; my_timer->stop(); } });}MainWindow::~MainWindow(){ delete ui;}// 啟動(dòng)定時(shí)器,并設(shè)置周期為100毫秒void MainWindow::on_pushButton_clicked(){ if(my_timer->isActive() == false) { my_timer->start(100); }}// 停止定時(shí)器void MainWindow::on_pushButton_2_clicked(){ if(my_timer->isActive() == true) { my_timer->stop(); }}// 將進(jìn)度條置空void MainWindow::on_pushButton_3_clicked(){ ui->progressBar->setValue(0); ui->progressBar_2->setValue(100);}
DateTime 日期與時(shí)間組件: 時(shí)間組件中包括了可以顯示時(shí)間的QTime
顯示日期的QDate
以及可同時(shí)顯示時(shí)間與日期的QDateTime
這三種組件,三種組件的使用上幾乎一致,如下代碼是開發(fā)中最常用的總結(jié)。
#include "mainwindow.h"#include "ui_mainwindow.h"#include // By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::~MainWindow(){ delete ui;}// 獲取當(dāng)前日期時(shí)間,并初始化到組件中void MainWindow::on_pushButton_clicked(){ QDateTime curDateTime = QDateTime::currentDateTime(); ui->timeEdit->setTime(curDateTime.time()); ui->dateEdit->setDate(curDateTime.date()); ui->dateTimeEdit->setDateTime(curDateTime); ui->lineEdit->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));}// 將字符串時(shí)間日期轉(zhuǎn)換到時(shí)間日期組件中void MainWindow::on_pushButton_2_clicked(){ QString str = ui->lineEdit_2->text(); str = str.trimmed(); if(!str.isEmpty()) { QDateTime datetime = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss"); ui->dateTimeEdit_string_to_datetime->setDateTime(datetime); }}
PlainTextEdit 多行文本框: 多行文本編輯器,用于顯示和編輯多行簡(jiǎn)單文本,如下代碼左側(cè)PlainTextEdit
中輸入數(shù)據(jù)(每行換行)點(diǎn)擊按鈕后自動(dòng)將左側(cè)數(shù)據(jù)放入右側(cè)的listView
組件中。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include #include // By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // 狀態(tài)欄的創(chuàng)建 QStatusBar * stBar = statusBar(); setStatusBar(stBar); QLabel * label = new QLabel("左側(cè)提示信息",this); stBar->addWidget(label); QLabel * label2 = new QLabel("右側(cè)提示信息",this); stBar->addPermanentWidget(label2);}MainWindow::~MainWindow(){ delete ui;}// 點(diǎn)擊按鈕實(shí)現(xiàn)將 plainTextEdit 里面的數(shù)據(jù)逐行放入到右側(cè)void MainWindow::on_pushButton_clicked(){ QTextDocument* doc = ui->plainTextEdit->document (); // 文本對(duì)象 int count = doc->blockCount(); // 定義回車為分隔符 // 定義data,model用于存儲(chǔ)每個(gè)文本 QStringList data; QStringListModel *model; for(int x=0;x< count;x++) { QTextBlock textLine = doc->findBlockByNumber(x); // 每次取出plainTextEdit中的一行 QString str = textLine.text(); data << str; // 放入鏈表中 } // 顯示到ListView中 model = new QStringListModel(data); ui->listView->setModel(model);}
RadioButton 單選框分組: 單選框是最常用的組件,在一個(gè)界面中可以有多種單選框,每種單選框都會(huì)對(duì)應(yīng)一個(gè)問題,此實(shí)我們需要使用ButtonGroup
組件對(duì)單選框進(jìn)行分組,并通過(guò)信號(hào)和槽函數(shù)相互綁定,從而實(shí)現(xiàn)對(duì)用戶的多種選擇進(jìn)行判斷。
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include QButtonGroup *group_sex;QButtonGroup *group_hobby;// By : LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // 將不同的RadioButton放入不同的ButtonGroup組中 group_sex = new QButtonGroup(this); group_sex->addButton(ui->radioButton_male,0); group_sex->addButton(ui->radioButton_female,1); group_sex->addButton(ui->radioButton_unknown,2); ui->radioButton_unknown->setChecked(true); group_hobby = new QButtonGroup(this); group_hobby->addButton(ui->radioButton_eat,3); group_hobby->addButton(ui->radioButton_drink,4); group_hobby->addButton(ui->radioButton_sleep,5); ui->radioButton_eat->setChecked(true); // 綁定信號(hào)和槽 connect(ui->radioButton_male,SIGNAL(clicked(bool)),this,SLOT(MySlots())); connect(ui->radioButton_female,SIGNAL(clicked(bool)),this,SLOT(MySlots())); connect(ui->radioButton_unknown,SIGNAL(clicked(bool)),this,SLOT(MySlots()));}MainWindow::~MainWindow(){ delete ui;}// 手動(dòng)創(chuàng)建一個(gè)槽函數(shù),此處的槽函數(shù)聲明需要加入到頭文件private slots中void MainWindow::MySlots(){ switch(group_sex->checkedId()) { case 0: std::cout << "male" << std::endl; break; case 1: std::cout << "female" << std::endl; break; case 2: std::cout << "unknown" << std::endl; break; }}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/124542.html
摘要:友情提示先關(guān)注收藏,再查看,萬(wàn)字保姆級(jí)語(yǔ)言從入門到精通教程。及大牛出天地開始有隨之乃有萬(wàn)種語(yǔ)年英國(guó)劍橋大學(xué)推出了語(yǔ)言。 友情提示:先關(guān)注收藏,再查看,13 萬(wàn)字保...
摘要:在控制臺(tái)中,您可以逐個(gè)編寫命令,這些命令在按下時(shí)執(zhí)行宏可以包含由多行組成的更復(fù)雜的腳本,只有在執(zhí)行宏時(shí)才會(huì)執(zhí)行。更好的是,您可以在中設(shè)置一個(gè)選項(xiàng),以在控制臺(tái)中顯示腳本命令。 Python是一種編程語(yǔ)言,使用起來(lái)非常簡(jiǎn)單,學(xué)習(xí)起來(lái)非???。它是開源的,多平臺(tái)的,可以單獨(dú)用于各種各樣的事情,從簡(jiǎn)單的shell腳本編程到非常復(fù)雜的程序。但其最廣泛的用途之一是作為腳本語(yǔ)言,因?yàn)樗苋菀浊度氲狡渌?..
摘要:網(wǎng)上關(guān)于環(huán)境下訪問數(shù)據(jù)庫(kù)的資料很少,文本分析了訪問數(shù)據(jù)庫(kù)的過(guò)程。環(huán)境訪問主要有兩種方式利用封裝的數(shù)據(jù)庫(kù)訪問組件利用的函數(shù)。使用平臺(tái)訪問的局限性很大,一旦脫離了訪問組件,數(shù)據(jù)庫(kù)就無(wú)法操作。連接數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接函數(shù)返回值指針,即連接指針。 PostgreSQL是一款在Linux環(huán)境下應(yīng)用十分廣泛的輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù),大家都聽說(shuō)過(guò)MySQL,卻對(duì)PostgreSQL鮮有耳聞,它其實(shí)在性...
閱讀 2770·2021-11-23 09:51
閱讀 3529·2021-10-08 10:17
閱讀 1261·2021-10-08 10:05
閱讀 1309·2021-09-28 09:36
閱讀 1833·2021-09-13 10:30
閱讀 2174·2021-08-17 10:12
閱讀 1670·2019-08-30 15:54
閱讀 2003·2019-08-30 15:53