Qt學(xué)習(xí)-(基本按鈕功能實(shí)現(xiàn))

Qt學(xué)習(xí)

模擬登陸界面

  • 登陸賬號(hào)密碼成功時(shí)輸出ok隙咸,否則error
void MainWindow::on_pushButton_clicked()
{
    //qDebug()<<ui->linename->text()<<endl;
    //qDebug()<<ui->linepwd->text()<<endl;
    if((ui->linename->text()=="ssh123")&&(ui->linepwd->text()=="543859438"))
    {
        qDebug()<<"ok"<<endl;
    }
    else
    {
        qDebug()<<"error"<<endl;
    }
}

void MainWindow::on_close_clicked()
{
    close();
}
  • 實(shí)際效果
Paste_Image.png
Paste_Image.png

將password的echo模式改為password即可實(shí)現(xiàn)密碼隱藏

Paste_Image.png

界面的objectname-MainWindow不可以修改检痰!

模擬信號(hào)和槽之間的連接機(jī)制

mainwindow.h

public slots:
    void hello(int a);
signals:
    void mySignal(int b);//定義一個(gè)信號(hào)

mainwindow.cpp

#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this,SIGNAL(mySignal(int)),this,SLOT(hello(int)));//鏈接一般寫在構(gòu)造函數(shù)里
    emit mySignal(1001);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::hello(int a)
{
    qDebug()<<"hello a="<<a<<endl;
}
Paste_Image.png

信號(hào)與槽

  • Qt中我們使用信號(hào)和槽可以替代回調(diào)的技術(shù)。
    當(dāng)一個(gè)特定事件發(fā)生的時(shí)候理卑,一個(gè)信號(hào)被發(fā)射
    • Qt的窗口部件有很多預(yù)定義的信號(hào),但是我們總是可以通過繼承來加入我們自己的信號(hào)
    • 槽就是一個(gè)可以被調(diào)用處理特定信號(hào)的函數(shù)
    • Qt的窗口部件又很多預(yù)定義的槽步藕,但是通常的習(xí)慣是你可以加入自己的槽惦界,這樣你就可以處理你所感興趣的信號(hào)
  • connect(src, SIGNAL(signature), dest, SLOT(signature));
    • 簽名由函數(shù)名和參數(shù)類型組成。不允許有變量名或值咙冗。
    • 信號(hào)可以發(fā)數(shù)據(jù)給槽沾歪,但參數(shù)類型要對(duì)應(yīng),
    • 發(fā)出的數(shù)據(jù)可以多發(fā)少收雾消,但不能少發(fā)多收
  • signal和slot機(jī)制
    • 一個(gè)信號(hào)可以被連接到多個(gè)槽
      connect(inputBox, SlGNAL(valueChanged(int)), staticBox,SLOT(setValue(int)));
      connect(inputBox, SIGNAL(vaIueChanged(int)), okButton, SLOT(setTittIe(int)));
    • 多個(gè)信號(hào)可以被連接到一個(gè)槽
      connect(doPlusBox, SIGNAL(overflow()), this, SLOT(mathError()));
      connect(doMinusBox, SIGNAL(lessZero()), this灾搏,SLOT(mathError0));
    • 一個(gè)信號(hào)可以被連接到另外一個(gè)信號(hào)〈信號(hào)轉(zhuǎn)發(fā)〉
      connect(lineEdit, SIGNAL(textChanged()), this,SIGNAL(updateRecord());
    • 連接可以隨時(shí)移除
      disconnect(doPlusBox, SIGNAL(overflow()), this, SLOT(mathError()));

使用系統(tǒng)默認(rèn)槽操作

Paste_Image.png
  • 效果等同于使用slot按鍵關(guān)閉操作
Paste_Image.png
  • 效果為按下按鈕按鈕消失
Paste_Image.png
Paste_Image.png
  • 搞出下拉菜單

實(shí)現(xiàn)一個(gè)兩位數(shù)的計(jì)算器

  • 圖形界面的設(shè)計(jì)如下:


    Paste_Image.png
  • 在mainwindow.h中:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_pushButton_clicked();
    
        void on_pushButton_2_clicked();
    
        void on_pushButton_3_clicked();
    
        void on_pushButton_4_clicked();
    
        void on_pushButton_5_clicked();
    
        void on_pushButton_6_clicked();
    
        void on_pushButton_7_clicked();
    
        void on_pushButton_8_clicked();
    
        void on_pushButton_9_clicked();
    
        void on_pushButton_10_clicked();
    
        void on_pushButton_11_clicked();
    
        void on_pushButton_12_clicked();
    
        void on_pushButton_13_clicked();
    
        void on_pushButton_14_clicked();
    
        void on_pushButton_15_clicked();
    
    private:
        Ui::MainWindow *ui;
        int m_num1;
        int m_num2;
        int m_result;
        char m_op;
        int m_mark;
    };
    
    #endif // MAINWINDOW_H
    
    
  • 在mainwindow.cpp中:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_num1=0;
    m_num2=0;
    m_result=0;
    m_op='+';
    m_mark=0;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    if(m_mark==0)
    {
        m_num1=1;
    }

    else
    {
        m_num2=1;
    }

    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton->text());
}

void MainWindow::on_pushButton_2_clicked()
{
    if(m_mark==0)
    {
        m_num1=2;
    }

    else
    {
        m_num2=2;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_2->text());
}

void MainWindow::on_pushButton_3_clicked()
{
    if(m_mark==0)
    {
        m_num1=3;
    }

    else
    {
        m_num2=3;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_3->text());

}

void MainWindow::on_pushButton_4_clicked()
{
    if(m_mark==0)
    {
        m_num1=4;
    }

    else
    {
        m_num2=4;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_4->text());
}

void MainWindow::on_pushButton_5_clicked()
{
    if(m_mark==0)
    {
        m_num1=5;
    }

    else
    {
        m_num2=5;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_5->text());
}

void MainWindow::on_pushButton_6_clicked()
{
    if(m_mark==0)
    {
        m_num1=6;
    }

    else
    {
        m_num2=6;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_6->text());
}

void MainWindow::on_pushButton_7_clicked()
{
    if(m_mark==0)
    {
        m_num1=7;
    }

    else
    {
        m_num2=7;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_7->text());
}

void MainWindow::on_pushButton_8_clicked()
{
    if(m_mark==0)
    {
        m_num1=8;
    }

    else
    {
        m_num2=8;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_8->text());
}

void MainWindow::on_pushButton_9_clicked()
{
    if(m_mark==0)
    {
        m_num1=9;
    }

    else
    {
        m_num2=9;
    }
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_9->text());
}

void MainWindow::on_pushButton_10_clicked()
{
    m_op='+';
    m_mark=1;
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_10->text());

}

void MainWindow::on_pushButton_11_clicked()
{
    m_op='-';
    m_mark=1;
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_11->text());
}

void MainWindow::on_pushButton_12_clicked()
{
    m_op='*';
    m_mark=1;
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_12->text());
}

void MainWindow::on_pushButton_13_clicked()
{
    m_op='/';
    m_mark=1;
    ui->lineEdit->setText(ui->lineEdit->text()+ui->pushButton_13->text());
}

void MainWindow::on_pushButton_14_clicked()
{
    switch(m_op)
    {
        case '+':m_result=m_num1+m_num2;break;
        case '-':m_result=m_num1-m_num2;break;
        case '*':m_result=m_num1*m_num2;break;
        case '/':m_result=m_num1/m_num2;break;
    }
    QString temp=QString::number(m_result,10);
    temp=ui->lineEdit->text()+ui->pushButton_14->text()+temp;
    ui->lineEdit->setText(temp);
    m_num1=0;
    m_num2=0;
    m_result=0;
    m_op='+';
    m_mark=0;
}

void MainWindow::on_pushButton_15_clicked()
{
    ui->lineEdit->clear();
}
  • 運(yùn)行結(jié)果為:
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

firstui

  • 學(xué)生信息管理系統(tǒng)
  • styleSheet:可以修改文件的顏色和大小,顏色前面要加上color,不同應(yīng)用之間要用;隔開
Paste_Image.png
Paste_Image.png

輸入姓名與學(xué)號(hào)之后,點(diǎn)擊ok按鈕,則顯示出來,并且保存到文件里

  • 在firstui.h中:
private slots:
void on_pushok_clicked();
  • 在firstui.cpp中
void firstui::on_pushok_clicked()
{
    QString name=ui->linename->text();
    QString id=ui->lineid->text();
    qDebug()<<name<<" "<<id<<endl;
    QFile file("/home/jxb/1612/12/12.20/student.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {
        return;
    }
    QTextStream out(&file);
    out<<name<<" "<<id<<endl;
}
  • 則已在文件里保存了信息,如果student.txt前沒有加路勁,則默認(rèn)在別的路徑下,不好找,最好加路徑
Paste_Image.png
  • 性別可分為男或者女,這樣就要弄可選擇的按鈕,即單選按鈕Radio Button
  • 在firstui.cpp中
Paste_Image.png
void firstui::on_pushok_clicked()
{
    QString name=ui->linename->text();
    QString id=ui->lineid->text();
    QString sex=ui->sex->checkedButton()->text();//這里的sex是組名
    qDebug()<<name<<" "<<id<<endl;
    QFile file("/home/jxb/1612/12/12.20/student.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {
        return;
    }
    QTextStream out(&file);
    out<<name<<" "<<id<<" "<<sex<<endl;
}

  • 單選按鈕man和female,我們可以把它們放在一個(gè)組里,如何選擇組,選中兩個(gè)單項(xiàng)按鈕,然后右擊,選擇第二項(xiàng),可以把組的名字改為sex.
  • 結(jié)果為如下:
Paste_Image.png
  • 年齡可以有很多個(gè)年齡,則就要用到復(fù)選框,combo Box
  • 在firstui.cpp中
void firstui::on_pushok_clicked()
{
    QString name=ui->linename->text();
    QString id=ui->lineid->text();
    QString sex=ui->sex->checkedButton()->text();
    QString age=ui->comboBox->currentText();
    qDebug()<<name<<" "<<id<<endl;
    QFile file("/home/jxb/1612/12/12.20/student.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {
        return;
    }
    QTextStream out(&file);
    out<<name<<" "<<id<<" "<<sex<<" "<<age<<endl;
}

  • 則運(yùn)行結(jié)果為,可以選擇適當(dāng)?shù)哪挲g:雙擊復(fù)選框,則進(jìn)入編輯,調(diào)價(jià)多個(gè)項(xiàng)
Paste_Image.png
Paste_Image.png

科目如上,與age相同

  • 在firstui.cpp中
void firstui::on_pushok_clicked()
{
    QString name=ui->linename->text();
    QString id=ui->lineid->text();
    QString sex=ui->sex->checkedButton()->text();
    QString age=ui->comboBox->currentText();
    QString college=ui->comboBox_2->currentText();
    qDebug()<<name<<" "<<id<<endl;
    QFile file("/home/jxb/1612/12/12.20/student.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {
        return;
    }
    QTextStream out(&file);
    out<<name<<" "<<id<<" "<<sex<<" "<<age<<" "<<college<<endl;
}

  • 結(jié)果為如下:
Paste_Image.png
Paste_Image.png

興趣愛好,會(huì)有許多的興趣愛好,符合要求的都要勾上,則就要用到check Box

Paste_Image.png
  • 如果要多選的話,則就要把右下角interset組的exclusive的勾去掉,即去掉互斥性
Paste_Image.png
  • 則結(jié)果為:這里面用到了鏈表QList,則要包含頭文件
#include <QDebug>//要顯示line里面的內(nèi)容要加的
#include <QTextStream>
#include <QFile>//存到文件需要加的
#include <QList>
#include <QAbstractButton>

  • 在firstui.cpp中:
void firstui::on_pushok_clicked()
{
    QString name=ui->linename->text();
    QString id=ui->lineid->text();
    QString sex=ui->sex->checkedButton()->text();
    QString age=ui->comboBox->currentText();
    QString college=ui->comboBox_2->currentText();
    QList<QAbstractButton*>ins=ui->interset->buttons();
    qDebug()<<name<<" "<<id<<endl;
    QFile file("/home/jxb/1612/12/12.20/student.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {
        return;
    }
    QTextStream out(&file);
    out<<name<<" "<<id<<" "<<sex<<" "<<age<<" "<<college;
    for(int i=0;i<ins.size();i++)
    {
        if(ins[i]->isChecked())
        {
           out<<" "<<ins[i]->text();
        }
    }
    out<<endl;
}

Paste_Image.png

在上一次輸入完成之后,清空里面的內(nèi)容

  • 在firstui.cpp中:
void firstui::on_pushok_clicked()
{
    QString name=ui->linename->text();
    QString id=ui->lineid->text();
    QString sex=ui->sex->checkedButton()->text();
    QString age=ui->comboBox->currentText();
    QString college=ui->comboBox_2->currentText();
    QList<QAbstractButton*>ins=ui->interset->buttons();
    qDebug()<<name<<" "<<id<<endl;
    QFile file("/home/jxb/1612/12/12.20/student.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {
        return;
    }
    QTextStream out(&file);
    out<<name<<" "<<id<<" "<<sex<<" "<<age<<" "<<college;
    for(int i=0;i<ins.size();i++)
    {
        if(ins[i]->isChecked())
        {
           out<<" "<<ins[i]->text();
           ins[i]->setChecked(false);
        }
    }
    out<<endl;
    file.close();
    ui->linename->clear();
    ui->lineid->clear();
    ui->comboBox->setCurrentIndex(0);
    ui->comboBox_2->setCurrentIndex(0);
    ui->sex->setExclusive(false);//
    ui->sex->checkedButton()->setChecked(false);//
    ui->sex->setExclusive(true);//這三句是清空sex的選項(xiàng)
}
void firstui::on_pushno_clicked()
{
    close();
}

  • 程序運(yùn)行之前
  • 在程序運(yùn)行之后
Paste_Image.png

如果姓名想要兼容中文,則在main.cpp中

#include "firstui.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec* codec=QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    firstui w;
    w.show();

    return a.exec();
}

  • 能成功編譯過,并且能存入道文件中
Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市立润,隨后出現(xiàn)的幾起案子狂窑,更是在濱河造成了極大的恐慌,老刑警劉巖桑腮,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泉哈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡破讨,警方通過查閱死者的電腦和手機(jī)丛晦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來提陶,“玉大人烫沙,你說我怎么就攤上這事∠栋剩” “怎么了锌蓄?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撑柔。 經(jīng)常有香客問我瘸爽,道長(zhǎng),這世上最難降的妖魔是什么铅忿? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任蝶糯,我火速辦了婚禮,結(jié)果婚禮上辆沦,老公的妹妹穿的比我還像新娘。我一直安慰自己识虚,他們只是感情好肢扯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著担锤,像睡著了一般蔚晨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天铭腕,我揣著相機(jī)與錄音银择,去河邊找鬼。 笑死累舷,一個(gè)胖子當(dāng)著我的面吹牛浩考,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播被盈,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼析孽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了只怎?” 一聲冷哼從身側(cè)響起袜瞬,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎身堡,沒想到半個(gè)月后邓尤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贴谎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年汞扎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赴精。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佩捞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕾哟,到底是詐尸還是另有隱情一忱,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布谭确,位于F島的核電站帘营,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逐哈。R本人自食惡果不足惜芬迄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昂秃。 院中可真熱鬧禀梳,春花似錦、人聲如沸肠骆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚀腿。三九已至嘴瓤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背廓脆。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工筛谚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人停忿。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓驾讲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親瞎嬉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝎毡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自:作者簡(jiǎn)介作者:唐新華 (xhsmart@263.net)軟件工程師 ?? 信號(hào)和槽作為QT的核心機(jī)制在QT編...
    njukay閱讀 1,340評(píng)論 0 49
  • Qt學(xué)習(xí) Qt是什么 Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面庫,通過變以來跨平臺(tái)氧枣,實(shí)現(xiàn)一個(gè)Qt支持Unix,Linu...
    I踏雪尋梅閱讀 2,757評(píng)論 0 14
  • QT5實(shí)現(xiàn)音樂播放器是十分簡(jiǎn)單的沐兵,因?yàn)閮?nèi)部已經(jīng)封裝好了 QMediaPlayer 和 QMediaPlaylist...
    QingLinger閱讀 5,370評(píng)論 0 0
  • Qt學(xué)習(xí) 事件:事件在Qt分很多種扎谎,例如鼠標(biāo),鍵盤烧董,定時(shí)器毁靶,窗體大小,任何動(dòng)作在GUI都可以觸發(fā)某種事件逊移, 根據(jù)C...
    I踏雪尋梅閱讀 2,591評(píng)論 0 1
  • 每個(gè)人都有屬于自己的一段路预吆,你不知道接下來會(huì)發(fā)生什么,會(huì)改變什么胳泉,但即使這段路程再迷茫拐叉,再彷徨,沒有人會(huì)幫助你扇商,或...
    路憶閱讀 344評(píng)論 0 0