Part1,QString 常用操作

qtCode–> C++–> 可执行程序*.out。
qmake 中间件,调用g++。 打包成可执行文件。

Edit TabOrder: 按Tab键切换: 修改输入框聚焦顺序。
输入框密码模式:EchoMode~Password
objectName 相当于改控件的id。objectName=line_name
先改变名称,再转到槽,关联回调函数。
qDebug: 输出日志到console窗口。
setGeometry(x,y, w,h); //设置控件的偏移位置。

手动编译:qmake

生成解决方案文件.pro: qmake -project 会先生成*.pro文件。

QT += widgets

生成MakeFile文件: qmake 生成MakeFile文件。

生成最终可执行程序:make

按键事件:右键-转到槽-clicked: 生成方法
void MyText::on_btn_quit_clicked() {
this->close();
}
void MyText::on_btn_login_clicked() {
QString name = ui->line_name->text();
QString pwd = ui->line_pwd->text();
if(name == pwd){
qDebug() << “登录成功” << endl;
} else {
qDebug() << “登录失败” << endl;
}
}
呈现窗体,setUi();

QString 常用操作。

  1. QString构造函数[*], 把数据转换为QString;
  2. append 字符串拼接
  3. arg 字符串格式化拼接,类似printf。
  4. chop 字符串倒位剔除,相当于删除键。
  5. contains 包含某个字符串
  6. count 字符串统计
  7. replacle 查找替换。
  8. split 分割字符串。
  9. toxxx(), 转换为xxx类型。
  10. number() number类型转QString类型。
  11. insert() 插入到字符串指定位置,eg:正数变负数。
    0号位置插入-号,正数变成负数。

QStringList 字符数组。

加法计算器实现。

// 初始化
QString a; // 输入存储临时数据,存str格式。
QStringList b;

a.clear(); b.clear(); //清空ab
void Widget::on_pushButton1_clicked() {
    a += "1"; // a+="2"  a+="3"   a+="4"... 
    ui->lineEdit->setText(a); //输入数据回显
}
void Widget::on_pushButtonAdd_clicked(){ //+按钮
    b.insert(0, a); //被加数,存入到数组中。
    a.clear();
    b.insert(1, "+"); // 符号添加
    ui->lineEdit->setText(a); // 清空输入框 
}
void Widget::on_pushButtonEqual_clicked(){
    if(b.count() == 2) {
        b.insert(2, a); //加数添加。
        if(b.at(1) == "+"){
            // 获取数组中的值
            int sum = QString(b.at(0)).toInt() +QString(b.at(2)).toInt(); 
            ui->lineEdit->setText(QString::number(sum));
        } //...
    } else {
        a.clear();
        b.clear();
        ui->lineEdit->setText(a);
    }
}

QTimer *myTimer;
void doProcessTimeOut();

num =0; //int
myTimer = new QTimer(this);
connect(myTimer,timeout, this, doProcessTimeOut());
// 启动定时器
myTimer->start(1000);
//暂停
myTimer->stop();

void Widget::doProcessTimeOut() {
num++;
ui->progressBar->setValue(num);
}

QTextEdit 控件。

ui->textEdit->setText(“abc”);
QString msg = ui->textEdit->toPlainText();

按钮的复选框功能, setCheckable(true)

点击后,输出的值true、false交替。 否则一直输出是false值。
eg: 播放器播放暂停和播放。

toolButton, 可以设置menu. 弹出多个菜单列表。
QMenu *menu = new QMenu();
QAction *a1 =menu->addAction(QIcon(“../Image/voice.png”), “声音”,this,doProcess());
a1->setObjectName(“菜单1”); //…add More Action。
ui->toolButton->setMenu(menu);

void Widget::doProcess(){
QAction *action = (QAction *)this->sender();
qDebug() << action->objectName() <<endl;
qDebug() << action->text() <<endl;
}

多个cbox,共同触发一个事件。QCheckBox + QRadioButton

多个cbox,手动关联槽函数doProcessCheckBox()。
void Widget::doProcessCheckBox(){
QCheckBox *cbox = (QCheckBox *)this->sender();
if(cbox->isChecked() ) {
qDebug() << cbox->text() <<endl;
}
}
void Widget::doProcessRadioButton(){
QRadioButton *rbtn = (QRadioButton *)this->sender();
if(rbtn->isChecked()) {
qDebug() << rbtn->text() <<endl;
}
}

随机数函数。

猜数字游戏,太大或太小都提示。直到猜中数字了。重新开始游戏。

int num;
QString currentNum; //currentNum.clear() //清空

#include <QTime>
void Widget::Init() {
    // 1.产生种子
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    // 2.产生随机数。btn1-btn9.
    qdebug() << qrand() % 100 << endl;
    connect(ui->btn0, SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
}
void Widget::doProcessClickNum() {
    QPushButton* btn = (QPushButton*)this->sender();
    if(btn == NULL) return;
    QString text = btn->text();
    QString msg;
    
    if(currentNum.length() <1) {
        currentNum.append(text); // 继续追加
    }
    else if(currentNum.length() ==1) {//比较
        int v1 = currentNum.toInt();
        if(v1 < num) {
            msg.append("输入的值太小");
        } else if(v1 == num) {
            msg.append("猜中了");
            num = qrand() % 100; //重新生成随机数,继续游戏 
            qDebug() << 
        } else {
            msg.append("输入的值太大");
        }   
        ui->textEdit->append(msg);
        currentNum.clear();
    } 
    else {
        currentNum.clear();
    }
    ui->textEdit->setText(currentNum);
}

实现多个窗体的切换。信号与槽。

a. 分别有1,2,3号窗口。
b. 1号窗口中,加上2号头文件,并且实例化2号的空间。
c. 在1号窗体中,绑定2号窗体发送过来的信号,并用槽取处理(显示1窗体)
d. 在1号窗体按钮上,show2窗体。

接收第二个页面的显示请求。

// oneform.h cpp

void oneform::init (){
    QMovie* movie = new QMovie("/home/work/gif/a.gif");
    movie->start();
    ui->label->setMovie(movie);
    ui->label->setScaledContents(true);
    // 页面2的按钮点击事件。
    click(ui->pushButton,SIGNAL(clicked(bool)),this, 
        SLOT(doProcessClickGoto2Form(bool)));
        p_t2 = new twoform(); // 页面2:信号发送方,
    // 绑定页面2的回传消息SignalShowOneForm。 
    connect(p_t2, SIGNAL(SignalShowOneForm(QString)),
            this, SLOT(doProcessTwoFormRequest(QString)));  
}   

// 页面2关闭了,页面1继续显示。
void oneform::doProcessTwoFormRequest(QString str) {
    this->show(); //当前页面继续显示
}
// 按钮点击事件。槽函数。
private slots:
    void doProcessClickGoto2Form(bool);
private :
    towform t1; // 全局变量,只有1个。
void oneform::doProcessClickGoto2Form(bool) {
    // 跳转第二个页面,点击多次就有多个tf页面。
    // 加上this参数,子窗体会在父窗体里面直接显示。
    // towform *tf1 = new towform(); 
    t1.show(); // 显示页面2
    this->hide(); //页面1隐藏 
}   

// twoform.h cpp

private slots:
    void doProcessBack2OneForm(bool);
signals:
    void SignalShowOneForm(QString); //发送给页面1的信号。
private:
    int clickCount =0; // 页面跳转计数器
    void init(); // 初始化

// 根据页面2按钮发送的信号,页面1收到信号,让页面1显示。
connect(ui->pushBtn, SIGNAL(clicked(bool)),this,
    SLOT(doProcessBack2OneForm(bool)));
void twoform::doProcessBack2OneForm(bool){
    clickCount++;
    // 发送通知信号。
    emit SignalShowOneForm(QString::number(clickCount));    
    this->hide(); // 隐藏自己
}

© 版权声明

相关文章

暂无评论

none
暂无评论...