亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

qt (2) —— 部分部件

2019-11-11 05:27:54
字體:
來源:轉載
供稿:網友

本文大部分內容學習自《Foundations of Qt Development》

notes

qt name rules

類的名字以大寫字母開始,每一個新的詞也以大寫字母開頭,也即駱駝拼寫法 (CamelCasing) 方法的名字也遵從CamelCase,但是需要注意的是它以小寫字母開頭。

PRotected slots

被protect的slot只有被用作方法的時候才會被保護。私有的或者受保護的slots仍然能夠用于connect sigals

meta-object和信號槽機制

meta-object自己知道signals和slots,meta-object compiler (moc) 會用c++實現相關的內容。

signals and slots

qt使用指針實現信號槽,當我們發出信號,實際上也就在調用信號方法,該方法被moc實現。signal方法隨即調用slots。源對象和目標對象就是指向QObject或者它的子類的指針。

LIFO and FIFO

LIFO means “last in, first out”. 代表:棧 FIFO means “fist in, first out”. 代表:隊列

Qt designer

命令行啟動:shell> designer qt4可能是shell> designer-qt4

widgets

QSlider and progressBar

下面的小應用由dialog, horizontalSlider, progressBar, pushButton, label構成。 第三個progressBar的范圍是(0,0),結果時不顯示數值結果并不斷運動的,第4個progressBar的范圍我想設置成無窮大,但不確定這種方法setRange(-1,-1)是否正確。

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this);/* *for QProgressBar format : QString *This property holds the string used to generate the current text. *%p - is replaced by the percentage completed. %v - is replaced by the current value. %m - is replaced *by the total number of steps. The default value is "%p%". */ ui->progressBar->setFormat("%p%"); // default ui->progressBar_2->setFormat("%v out of %m"); //custom text ui->progressBar_3->setRange(0,0); // hide text and keep moving. ui->progressBar_4->setRange(-1,-1); // static connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int))); connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar_2,SLOT(setValue(int))); connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar_3,SLOT(setValue(int))); connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar_4,SLOT(setValue(int))); connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));}

這里寫圖片描述

QLineEdit

LineEdit的echo mod可以設置成不同的格式,屬性MaxLength則設定了能夠填寫的最大字符數。

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); ui->lineEdit_2->setEchoMode(QLineEdit::PassWord); ui->lineEdit_3->setMaxLength(9); connect(ui->lineEdit,SIGNAL(textChanged(QString)),ui->lineEdit_4,SLOT(setText(QString))); connect(ui->lineEdit_2,SIGNAL(textChanged(QString)),ui->lineEdit_5,SLOT(setText(QString))); connect(ui->lineEdit_3,SIGNAL(textChanged(QString)),ui->lineEdit_6,SLOT(setText(QString)));}

這里寫圖片描述

QListWidget

將listWidget放進Dialog后,合理設置layout,我們可以在改變dialog的大小同時產生上下滑動條。 下面的例子對choose and click做了一些處理。 dialog.cpp:

#include "dialog.h"#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); for(int i=0;i<10;i++){ ui->listWidget->addItem(QString::number(i)+" item"); }}Dialog::~Dialog(){ delete ui;}void Dialog::on_pushButton_clicked(){ QListWidgetItem *it = ui->listWidget->currentItem(); it->setText("you click "+it->text()); it->setBackground(Qt::black); it->setTextColor(Qt::red);}

這里寫圖片描述 好好利用QListWidget,如takeItem, addItem等方法,我們可以創建出類似于管理書單的應用窗體。 dialog.h

#ifndef DIALOG_H#define DIALOG_H#include <QDialog>#include <QListWidget>#include <QPushButton>namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECT QListWidget *listLeft, *listRight; QPushButton *buttonLeft, *buttonRight;public: explicit Dialog(QWidget *parent = 0); ~Dialog();private: Ui::Dialog *ui;public slots: void moveRight(); void moveLeft();};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"#include "ui_dialog.h"#include <QGridLayout>#include <QStringList>#include <QList>#include <QMessageBox>Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); listLeft = new QListWidget(this); listRight = new QListWidget(this); buttonLeft = new QPushButton(">>",this); buttonRight = new QPushButton("<<",this); QGridLayout *gLayout = new QGridLayout(this); gLayout->addWidget(listLeft,0,0); gLayout->addWidget(listRight,0,1); gLayout->addWidget(buttonLeft,1,0); gLayout->addWidget(buttonRight,1,1); QStringList items; items<<"apple"<<"pear"<<"banana"<<"peach"; listLeft->addItems(items); connect(buttonLeft,SIGNAL(clicked()),this,SLOT(moveRight())); connect(buttonRight,SIGNAL(clicked()),this,SLOT(moveLeft()));}Dialog::~Dialog(){ delete ui;}void Dialog::moveLeft(){ if(listRight->selectedItems().count()!=1) return; QListWidgetItem *item = listRight->takeItem(listRight->currentRow()); listLeft->addItem(item);}void Dialog::moveRight(){ if(listLeft->selectedItems().count()!=1) return; QListWidgetItem *item = listLeft->takeItem(listLeft->currentRow()); listRight->addItem(item);}

這里寫圖片描述

QPushButton

QPushButton可以被設置觸發(pressed),接著舉一個例子,應用QMessageBox,QPushButton,QString. 工程ButtonDialog,程序運行后,點擊toggle me按鈕,直到下一次點擊它,它一直處于pressed狀態。 pro文件:

#-------------------------------------------------## Project created by QtCreator 2017-02-04T18:29:24##-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = ButtonDialogTEMPLATE = appSOURCES += main.cpp/ dialog.cppHEADERS += dialog.hFORMS += dialog.ui

Dialog.h:

#ifndef DIALOG_H#define DIALOG_H#include <QDialog>#include <QPushButton>namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QWidget *parent = 0); ~Dialog(); public slots: void buttonClicked(); void buttonToggled();private: Ui::Dialog *ui; QPushButton *clickButton; QPushButton *toggleButton;};#endif // DIALOG_H

Dialog.cpp

#include "dialog.h"#include "ui_dialog.h"#include <QVBoxLayout>#include <QMessageBox>Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); clickButton = new QPushButton("click me",this); toggleButton = new QPushButton("toggle me",this); toggleButton->setCheckable(true); QVBoxLayout *vLayout = new QVBoxLayout(this); vLayout->addWidget(clickButton); vLayout->addWidget(toggleButton); connect(clickButton,SIGNAL(clicked()),this,SLOT(buttonClicked())); connect(toggleButton,SIGNAL(clicked()),this,SLOT(buttonToggled()));}Dialog::~Dialog(){ delete ui;}void Dialog::buttonClicked(){ QMessageBox::information(this,"Clicked","the Button is cliecked.");}void Dialog::buttonToggled(){ QMessageBox::information(this,"Toggled",QString("the button is %1!")/ .arg(toggleButton->isChecked()?"pressed":"released"));}

main.cpp

#include "dialog.h"#include <Qapplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Dialog w; w.show(); return a.exec();}

這里寫圖片描述

QLabel

QLabel可是設置shortCut,setBuddy。 在下面的例子中,按下”Alt+1”, 光標會聚焦于LineEdit1,按下”Alt +2”, 光標聚焦于LineEdit2。 這里寫圖片描述 dialog.cpp

#include "dialog.h"#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); ui->label->setText("Line&1"); ui->label_2->setText("Line&2"); ui->label->setBuddy(ui->lineEdit); ui->label_2->setBuddy(ui->lineEdit_2);}Dialog::~Dialog(){ delete ui;}

QComboBox

假設在類中聲明了slot,我們一定要在cpp中定義。 comboBox.h

#ifndef COMBOBOX_H#define COMBOBOX_H#include <QDialog>namespace Ui {class ComboBox;}class ComboBox : public QDialog{ Q_OBJECTpublic: explicit ComboBox(QWidget *parent = 0); ~ComboBox();public slots: void myshow(); //show is key word, care about it.private: Ui::ComboBox *ui;};#endif // COMBOBOX_H

comboBox.cpp

#include "combobox.h"#include "ui_combobox.h"#include <QFontComboBox>#include <QMessageBox>ComboBox::ComboBox(QWidget *parent) : QDialog(parent), ui(new Ui::ComboBox){ ui->setupUi(this); QFont font("KaiTi_GB2312",16); ui->comboBox->setFont(font); int i; for(i=0;i<10;i++){ ui->comboBox->addItem(QString::number(i)+" item"); } connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(myshow()));}void ComboBox::myshow(){ QMessageBox::information(this,"choosed",ui->comboBox->currentText());}ComboBox::~ComboBox(){ delete ui;}

main.cpp

#include "combobox.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); ComboBox w; w.show(); return a.exec();}

這里寫圖片描述

QSPinBox + LCD Number

在designer中進行connect設置,連接spinBox的valueChanged()和LCD number的display()。QDoubleSpinBox相比QSpinBox提供了更高的精度。 這里寫圖片描述 這里寫圖片描述

QCalender + QDateTime

QCalender和QDateTime(QDate)均可表示日期。前者更加直觀,后者更加精確,容易修改。

)

這里寫圖片描述

QGridLayout

GridLayout很強大,因為它靈活,坐標定位,所以用起來很方便。

#include <QApplication>#include <QGridLayout>#include <QLabel>#include <QDialog>#include <QString>int main(int argc,char *argv[]){ QApplication app(argc,argv); QDialog dlg; dlg.resize(400,400); dlg.show(); QGridLayout *grid = new QGridLayout(&dlg); int i,j; int counter = 1; for(i=0;i<10;i++){ for(j=0;j<10;j++){ QLabel *label = new QLabel(QString::number(counter)); label->setFrameStyle(QFrame::Panel | QFrame::Sunken); grid->addWidget(label,i,j); counter++; } } grid->setMargin(2); return app.exec();}

這里寫圖片描述

QVBoxLayout

.pro

SOURCES += / main.cppQT += widgets

main.cpp

#include <QApplication>#include <QLabel>#include <QDialog>#include <QVBoxLayout>#include <QDialogButtonBox>#include <QPushButton>#include <QGridLayout>#include <QDebug>int main(int argc,char *argv[]){ QApplication app(argc,argv); QDialog dlg; dlg.resize(100,200); dlg.show(); QLabel *label = new QLabel("hello world."); label->show(); QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok |QDialogButtonBox::Cancel); QVBoxLayout *vLayout = new QVBoxLayout(&dlg); vLayout->addWidget(label); vLayout->addStretch(); vLayout->addWidget(buttons); return app.exec();}

這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级在线亚洲天堂| 久操成人在线视频| 国产精品美女久久久久av超清| 欧美激情2020午夜免费观看| 国产精品视频999| 欧美成人精品在线观看| 久久久av电影| 精品亚洲国产成av人片传媒| 日韩视频一区在线| 久久人91精品久久久久久不卡| 久久久久久久一区二区| 91九色视频在线| 狠狠久久亚洲欧美专区| 日韩中文av在线| 91在线观看欧美日韩| 一区二区欧美日韩视频| 久久久久久网址| 黑人巨大精品欧美一区免费视频| 在线观看国产欧美| 国产日韩欧美中文在线播放| 色妞在线综合亚洲欧美| 欧美日韩国产在线看| 欧美性少妇18aaaa视频| 久久99国产精品久久久久久久久| 亚洲激情视频在线播放| 性欧美xxxx交| 欧美性极品少妇精品网站| 日韩视频免费在线| 国产伦精品一区二区三区精品视频| 亚洲一区二区三区毛片| 2019中文字幕在线观看| 久久精品一区中文字幕| 亚洲人高潮女人毛茸茸| 国产精品久久久久不卡| 中文字幕精品久久久久| 日韩欧美黄色动漫| 久久躁日日躁aaaaxxxx| 亚洲一区二区三区毛片| 韩剧1988免费观看全集| 成人免费视频xnxx.com| 91欧美精品午夜性色福利在线| 在线播放国产一区中文字幕剧情欧美| 国产精品扒开腿爽爽爽视频| 亚洲人成网站色ww在线| 国产综合久久久久| 欧美高清在线播放| 久久久久国产精品免费| 欧美黑人性视频| 日韩毛片在线看| 亚洲综合色av| 亚洲精品福利免费在线观看| 超在线视频97| 国语自产精品视频在线看一大j8| 久久视频这里只有精品| 欧美在线视频观看免费网站| 国产精品美女在线观看| 日韩欧美亚洲综合| 最近2019年中文视频免费在线观看| 国产精品av电影| 精品国产网站地址| 国产免费一区二区三区香蕉精| 日韩电影大片中文字幕| 国产成人欧美在线观看| 成人免费淫片aa视频免费| 亚洲的天堂在线中文字幕| 欧美激情精品久久久久久蜜臀| 国产有码在线一区二区视频| 久久久免费av| 久久国产精品网站| 欧美麻豆久久久久久中文| 国语自产精品视频在免费| 亚洲综合日韩在线| 91高潮精品免费porn| 欧美xxxx18国产| 欧美韩日一区二区| 91精品久久久久久久久久久久久| 美日韩精品免费观看视频| 欧美高跟鞋交xxxxxhd| 一本一本久久a久久精品综合小说| 国产视频久久久久久久| 国产精品电影网站| 日韩中文字幕免费看| 国产精品国产三级国产aⅴ浪潮| 欧美猛少妇色xxxxx| 国产精品免费在线免费| 欧美二区乱c黑人| 欧美亚洲另类视频| 亚洲视频国产视频| 在线精品视频视频中文字幕| 97免费视频在线播放| 欧美激情videos| 久久久久久久久久久久av| 久久91亚洲精品中文字幕奶水| 欧美在线www| 国产精品精品国产| 久久天天躁狠狠躁老女人| 欧美裸身视频免费观看| 久久影院资源网| 午夜免费日韩视频| 青青a在线精品免费观看| 国产精品日韩在线一区| 久久精品成人动漫| 国产欧美精品一区二区三区-老狼| 国产欧美最新羞羞视频在线观看| 久久国产精品久久久久久久久久| 九九热99久久久国产盗摄| 亚洲精品一区在线观看香蕉| 最近2019中文字幕一页二页| 日韩在线免费视频观看| 久久久久久国产免费| 久久免费福利视频| 日韩av在线精品| 欧美不卡视频一区发布| 亚洲色图偷窥自拍| 精品视频在线播放免| 国产午夜精品美女视频明星a级| 欧美性理论片在线观看片免费| 91九色在线视频| 国产精品直播网红| 国产福利精品av综合导导航| 久久精品视频中文字幕| 国产精品一区二区久久精品| 色综合伊人色综合网站| 日韩中文有码在线视频| 亚洲美女喷白浆| 亚洲2020天天堂在线观看| 国产精品亚洲精品| 91福利视频在线观看| 日韩中文字幕免费视频| 亚洲的天堂在线中文字幕| 超碰精品一区二区三区乱码| 在线观看精品国产视频| 国产99视频精品免视看7| 国产福利视频一区二区| 北条麻妃一区二区在线观看| 国模吧一区二区三区| 欧美夫妻性视频| 亚洲精品乱码久久久久久金桔影视| 97色在线观看免费视频| 人体精品一二三区| 日韩在线视频二区| 一区二区三区天堂av| 成人在线一区二区| 国产亚洲欧洲黄色| 国产精品三级美女白浆呻吟| 亚洲а∨天堂久久精品9966| 日韩欧美综合在线视频| 欧美色播在线播放| 亚洲国产成人在线播放| 成人黄色大片在线免费观看| 浅井舞香一区二区| 久久久久久高潮国产精品视| 黑人巨大精品欧美一区二区免费| yw.139尤物在线精品视频| 亚洲美女www午夜| 欧美专区在线播放| 青青a在线精品免费观看| 欧美亚洲在线视频| 青青草原一区二区| 亚洲欧美制服另类日韩| 亚洲欧洲一区二区三区在线观看| 欧美电影免费播放| 国产午夜精品理论片a级探花| www.国产精品一二区|