Demo1:文本框,按键赋值,
页面有2个输入框,10个数字按键。
禁用按键的聚焦功能,仅保留2个输入框的聚焦。
private:
void Init();
int whoInput; //1手机号,2卡号,0默认值
void Widget::Init(){
whoInput = 0;
connect(ui->btn0, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn1, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn2, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn3, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn4, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn5, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn6, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn7, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn8, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
connect(ui->btn9, SIGNAL(clicked(bool)), this,SLOT(doProcesClickNum(bool)));
}
void Widget::doProcesClickNum(bool){
//QPushButton* btn = (QPushButton*)this->sender();
QPushButton* btn = qobject_cast(QPushButton*)(this->sender());
if(btn == NULL) return;
QString text = btn->text();
if(ui->ledit_phone->hasFocus()){ // 谁聚焦了
QString oldText = ui->ledit_phone->text();
oldText.append(text);
ui->ledit_phone->setText(oldText);
} else if(ui->ledit_bank->hasFocus()){
QString oldText = ui->ledit_bank->text();
oldText.append(text);
ui->ledit_bank->setText(oldText);
}
}
Demo2:QListWidget值切换,拖动改变值。
左右各显示一个列表,中间显示2个按键(A->B, B-A).
void Dialog::Init(){
// QListWidgetItem *item1 = new QListWidgetItem(QIcon(":/new/prefix/image/about.png"),"关于");
// ui->listA->addItem(item1);
QStringList fruit;
fruit << "Apple" << "Bananan" << "Tomato" <<"Bear" << "Orange" << "WaterMalen";
ui->listA.addItems(fruit);
QStringList game;
game << "篮球"<< "足球"<< "排球"<< "棒球"<< "橄榄球";
ui->listB.addItems(game);
}
void MoveCurrentItem(QListWidget *src, QListWidget* target);
void Dialog::MoveCurrentItem(QListWidget *source, QListWidget* target){
QListWidgetItem *selectItem = source->currentItem()
if(selectItem != NULL) { // 当前选中item
QListWidgetItem newItem = selectItem->clone();
target->addItem(newItem); //移动到目标列表
target->setCurrentItem(newItem); //设置选中聚焦
delete selectItem; //删除原source中item。
}
}
void Dialog::on_btn_atob_clicked() {
MoveCurrentItem(ui->listA, ui->listB);
}
void Dialog::on_btn_btoa_clicked() {
MoveCurrentItem(ui->listB, ui->listA);
}
//mylistWidget.h
#include <QWidget>
#include <QListWidget>
#include <QMimeData>
#include <QMouseEvent>
#include <QDragEnterEvent>
#include <QDropEvent>
class myListWidget : public QListWidget
{
Q_OBJECT
public:
explicit myListWidget(QWidget *parent =0);
protected:
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void dragEnterEvent(QDragEnterEvent *e);
void dragMoveEvent(QDragMoveEvent *e);
void dropEvent(QDropEvent *e);
private:
QListWidgetItem * currentItem;
bool isDrop;
QPoint start;
};
//myistWidget.cpp
#include "mylistWidget.h"
#include <QApplication>
myListWidget::myListWidget(QWidget *parent) : QListWidget(parent)
{ //构造函数
this->setAcceptDrops(true);
currentItem = NULL;
isDrop = false;
}
//按下鼠标左键。
void myListWidget::mousePressEvent(QMouseEvent *e){
if(e->button != Qt::LeftButton){
return;
}
QListWidget::mousePressEvent(e); //send signal
start = e->pos();
//isDrop = false;
}
void myListWidget::mouseMoveEvent(QMouseEvent *e){
//鼠标左键。
if(e->buttons & Qt::LeftButton){
//判断拖动长度大于起始长度,才认为是拖动;否则,不做拖动。
int distance = (e->pos() - start).manhattanLength();
if(distance >= QApplication::startDragDistance()) {
//获取当前被选中的值
currentItem = this->currentItem();
if(currentItem){
// 获取文本,准备要传送的数据
QMimeData *mimeData = new QMimeData();
mimeData->setText(currentItem->text());
//1.准备传送的对象
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
//1.1设置drag对象的图标
drag->setPixmap(QPixmap(":/image/add.png"));
//1.2进行拖动操作
if(Qt:::MoveAction == drag->exec(Qt:::MoveAction))
{
delete currentItem; //删除原来的值,
}
QListWidget::mouseMoveEvent(e); //发送信号
}
}
}
}
void myListWidget::dragEnterEvent(QDragEnterEvent *e){
QListWidget *source = qobject_cast<QListWidget*> (e->source());
if(source != NULL && source!=this){ //只能A到B移动
e->setDropActiion(Qt::MoveAction);
e->accept();
}
}
void myListWidget::dragMoveEvent(QDragMoveEvent *e){
QListWidget *source = qobject_cast<QListWidget*> (e->source());
if(source != NULL && source!=this){
e->setDropActiion(Qt::MoveAction);
e->accept();
}
}
void myListWidget::dropEvent(QDropEvent *e){
QListWidget *source = qobject_cast<QListWidget*> (e->source());
//判断是否为空,判断是否为自己本身。
if(source != NULL && source!=this){
QString str = e->mimeData()->text();
QListWidgetItem *item = new QListWidgetItem(str);
this->addItem(item);
this->setCurrentItem(item);
e->setDropActiion(Qt::MoveAction);
e->accept();
isDrop = true;
}
}
void myListWidget::mouseReleaseEvent(QMouseEvent *e){
if(!isDrop){
QListWidgetItem *item = new QListWidgetItem(str);
this->addItem(item);
this->setCurrentItem(item);
}
}
//dialog.h
#include "mylistwidget.h"
void InitMyListWidget();
private:
myListWidget * myListA;
myListWidget * myListB;
//dialog.cpp
void Dialog::InitMyListWidget(){
myListA = new myListWidget(this);
myListB = new myListWidget(this);
QStringList fruit;
fruit << "Apple" << "Bananan" << "Tomato" <<"Bear" << "Orange" << "WaterMalen";
myListA.addItems(fruit);
QStringList game;
game << "篮球"<< "足球"<< "排球"<< "棒球"<< "橄榄球";
myListB.addItems(game);
ui->gridLayout->addWidget(myListA);
ui->gridLayout2->addWidget(myListB);
}