Qt中的常用外掛
阿新 • • 發佈:2019-02-08
myWidget.cpp檔案
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDebug>
#include <QDesktopServices>
#include <QUrl>
#include <QString>
myWidget::myWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::myWidget)
{
ui->setupUi(this);
this->setFixedSize(320 ,480);//視窗大小固定,無法改變
QPixmap icon(":/Sources/b_resume.png");//新建圖片資源
/*設定圖示按鈕*/
QPushButton* myButton = new QPushButton(this);
myButton->move(100,100);
myButton->setIcon(icon);
//myButton->setIcon(QPixmap(":/Sources/b_resume.png"));
myButton->setFixedSize(icon.size());//設定按鈕大小
myButton->setIconSize(icon.size());//設定圖示大小
myButton->setFlat(true);//去掉邊框
connect(myButton, &QPushButton::pressed,
[=]()
{
qDebug()<<"按鈕被點選";
}
);
/*label: 標籤、顯示靜態文字、圖片和網頁url, 支援html格式*/
QLabel* label3 = new QLabel(this);
label3->move(200, 10);
//顯示靜態文字
label3->setText("<h1>label3</h1>");//h1~h6表示不同的網頁字型
QLabel* label = new QLabel(this);
//顯示網頁url
label->setText("<a href=www.baidu.com>baidu</a>");
label->move(10,20);
connect(label, &QLabel::linkActivated,
[](QString str)
{
QDesktopServices::openUrl(QUrl(str));//呼叫服務開啟瀏覽器
}
);
//顯示圖片
QLabel* label2 = new QLabel(this);
label2->setText("<img src=:/Sources/cover_b1.png></img>");
//lable2->setText(icon);
label2->move(10,40);
/*單行文字輸入框*/
QLineEdit* lineEdit = new QLineEdit(this);
lineEdit->setEchoMode(QLineEdit::Password);//密碼輸入時變為圓點
//lineEdit->setCompleter(引數不知道);//輸入時自動匹配
lineEdit->setPlaceholderText("請輸入密碼");//提示文字,淡灰色,使用者輸入時消失
lineEdit->setClearButtonEnabled(true);//開啟清除按鈕
lineEdit->setMaxLength(8);//設定文字最大長度
connect(lineEdit,&QLineEdit::returnPressed,
[=]()
{
qDebug()<<lineEdit->text();//按下回車時讀取文字
}
);
/*多行文字輸入, 富文字:內容可以為圖片*/
textEdit = new QTextEdit(this);
textEdit->move(10,200);
textEdit->setMaximumHeight(40);
connect(textEdit, &QTextEdit::textChanged, this, &myWidget::recvTextChange);//文字發生改變時發出訊號
/*平文字,不可輸入圖片*/
//QPlainTextEdit* plainTextEdit = new QPlainTextEdit(this);
/*單選框, 同組單選框互斥*/
QRadioButton* b1 = new QRadioButton(this);
b1->setText("吃1");
b1->setChecked(true);//設定初始值
b1->move(10,250);
QRadioButton* b2 = new QRadioButton(this);
b2->setText("吃2");
b2->move(10,270);
QRadioButton* b3 = new QRadioButton(this);
b3->setText("吃3");
b3->move(10,290);
QRadioButton* b4 = new QRadioButton(this);
b4->setText("喝1");
b4->move(100,250);
QRadioButton* b5= new QRadioButton(this);
b5->setText("喝2");
b5->move(100,270);
QRadioButton* b6 = new QRadioButton(this);
b6->setText("喝3");
b6->move(100,290);
//給RadioButton分組, b1~b3屬於myWidget
QButtonGroup* box = new QButtonGroup(this);
box->addButton(b4);
box->addButton(b5);
box->addButton(b6);
b4->setChecked(true);
/*複選框*/
QCheckBox* checkBox = new QCheckBox("吃飽了",this);
checkBox->move(10,320);
connect(checkBox,&QCheckBox::stateChanged,
[=](int value)
{
qDebug()<<checkBox->isChecked()<<value; //value==表示未選中,2表示選中,1表示不可選
}
);
/*下拉選擇框*/
QComboBox* comboBox = new QComboBox(this);
comboBox->move(100, 320);
comboBox->addItem("吃雞");
comboBox->addItem("吃土");
comboBox->addItem("吃素");
comboBox->setCurrentIndex(1);//設定預設值,Index和Text是一一對應的
connect(comboBox, &QComboBox::currentTextChanged,
[=](QString str)
{
qDebug()<<str;//打印出選項字串
}
);
/*滑塊*/
QSlider* slider = new QSlider(this);
slider->setOrientation(Qt::Horizontal);
slider->move(10, 340);
slider->setMinimum(1);
slider->setMaximum(99);
slider->setValue(50);//設定初始值
/*撥碼選擇塊*/
QSpinBox* spinBox = new QSpinBox(this);
spinBox->move(10+slider->size().width(), 340);//關聯位置
spinBox->setMinimum(1);
spinBox->setMaximum(99);
spinBox->setValue(50);
/*Slider通常和SpinBox聯合使用*/
connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);
void (QSpinBox::*pFunc)(int) = QSpinBox::valueChanged;
connect(spinBox, pFunc, slider, &QSlider::setValue);//SpinBox的valueChanged有過載
/*日期*/
QDateEdit* dateEdit = new QDateEdit(QDate::currentDate(),this);//新增currentTime使dateEdit出現時顯示當前日期
dateEdit->move(10, 370);
dateEdit->setCalendarPopup(true);//設定時間時開啟日曆
/*時間*/
QTimeEdit* timeEdit = new QTimeEdit(QTime::currentTime(),this);
timeEdit->move(30+dateEdit->size().width(),370);
//timeEdit->setCalendarPopup(true);//timeEdit無法開啟日曆,此句無效
/*日期時間*/
QDateTimeEdit* dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(), this);
dateTimeEdit->move(10, 400);
dateTimeEdit->setCalendarPopup(true);
qDebug()<<dateEdit->date();
qDebug()<<dateEdit->date().year()<<" "<<dateEdit->date().month()<<" "<<dateEdit->date().day();
qDebug()<<timeEdit->time();
qDebug()<<timeEdit->time().hour()<<" "<<timeEdit->time().minute()<<" "<<timeEdit->time().second();
qDebug()<<dateTimeEdit->dateTime();
qDebug()<<dateTimeEdit->date().year()<<" "<<dateTimeEdit->time().hour();
/*設定數碼管顯示外掛*/
QLCDNumber* lcdNum = new QLCDNumber(this);
lcdNum->display("2018");//LcdNumber只能作為輸出顯示東西
lcdNum->setGeometry(10,425,100,50);
/*設定視窗標題*/
this->setWindowIcon(QPixmap(":/Sources/props_paint.png"));
/*設定視窗背景*/
}
myWidget::~myWidget()
{
delete ui;
}
void myWidget::recvTextChange()
{
QString str = textEdit->toPlainText();
if(str.contains("aaa"))//當出現“aaa”,將其替換為一張圖片
{
str.replace("aaa","<img src=:/Sources/star_blue.png></img>");
textEdit->setText(str);
}
}
void myWidget::paintEvent(QPaintEvent* p)//過載函式以設定背景圖片;重繪視窗,自動呼叫
{
QPainter painter(this);
painter.drawPixmap(0,0,width(),height(),QPixmap(":/Sources/props_paint.png"));
}