Qt GUI 组件与事件添加

C plus plus Qt 04 - Signals and Slots - YouTube

//链接
connect(ui->horizontalScrollBar,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));
//取消链接
disconnect(ui->horizontalScrollBar,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));

C plus plus Qt 05 - Displaying Windows - YouTube

添加新文件 - Qt - Qt 设计师界面类(Qt Designer Form Class)- Dialog without Buttons - myDialog

然后 生成对应的文件mydialog.ui mydialog.h mydialog.cpp,可以修改ui等等

具体显示窗口的方法如下

#include "mydialog.h"

【方案1】

MyDialog mDialog;
//设为模态框为true,false时 都是模态框
mDialog.setModal(true);
mDialog.exec();

【方案2】

// .h文件定义成员变量
MyDialog *mDialog;
//.cpp 完善方法
mDialog=new MyDialog();
//模态框,非模态框生效
mDialog->setModal(true);
mDialog->show();

C plus plus Qt 06 - layouts, tabs and buddies

buddies 的作用

这个是用于设置QLabel的buddy的。在这个模式下,可以把QLabel跟其它控件连起来。QLabel可以设置快捷键,当按下快捷键后,窗口焦点就移动到与它连接扩控件上。

比如一个QLabel显示的是“用户名(&U)”,这表示Alt+U是快捷键。如果设置Buddy时把它跟一个输入框连接了,那么按了Alt+U的话,输入框就获得了焦点。

C plus plus Qt 07 - Basic Application and HTML Aware Widgets

新建项目 - 其他项目 - Empty qmake project

添加新文件 - C++ - c++ source file - main.cpp

代码清单

【.pro】

QT += widgets
SOURCES += \
    main.cpp

【main.cpp】

#include <QApplication>
#include <QLabel>

int main(int argc,char *argv[]){
    QApplication app(argc,argv);
    QLabel *label = new QLabel("Hello world");
    label->show();
    return app.exec();
}

效果

html aware

【问题】

Q:Error QApplication: no such file or directory

A:qt5 中需要在.pro文件中添加 QT += widgets 参考

C plus plus Qt 08 - Horizontal and Vertical Layouts - YouTube

代码清单

新建项目 - 其他项目 - Empty qmake project

添加新文件 - C++ - c++ source file - main.cpp

【.pro】

QT += \
    widgets
SOURCES += \
    main.cpp

【main.cpp】

#include <QApplication>
#include <QPushButton>
//#include <QHBoxLayout>
#include <QVBoxLayout>

int main(int argc,char *argv[]){
    QApplication app(argc,argv);
    QWidget *window=new QWidget();
    window->setWindowTitle("My App");
    QPushButton *button1=new QPushButton("one");
    QPushButton *button2=new QPushButton("two");
    QPushButton *button3=new QPushButton("three");

//    QHBoxLayout *hlayout=new QHBoxLayout;
//    hlayout->addWidget(button1);
//    hlayout->addWidget(button2);
//    hlayout->addWidget(button3);
//    window->setLayout(hlayout);

    QVBoxLayout *vlayout=new QVBoxLayout;
    vlayout->addWidget(button1);
    vlayout->addWidget(button2);
    vlayout->addWidget(button3);

    window->setLayout(vlayout);

    window->show();

    return app.exec();
}

效果

vertical layout

C plus plus Qt 09 - QGridLayout - YouTube

新建项目 - 其他项目 - Empty qmake project

添加新文件 - C++ - c++ source file - main.cpp

【.pro】

QT += \
    widgets
SOURCES += \
    main.cpp

【main.cpp】

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QtCore>

int main(int argc,char *argv[]){
    QApplication app(argc,argv);
    QWidget *window=new QWidget();
    window->setWindowTitle("My App");
    QGridLayout *layout=new QGridLayout();

    QLabel *label1=new QLabel("Name:");
    QLineEdit *txtName1=new QLineEdit;
    layout->addWidget(label1,0,0);
    layout->addWidget(txtName1,0,1);

    QLabel *label2=new QLabel("Name:");
    QLineEdit *txtName2=new QLineEdit;
    layout->addWidget(label2,1,0);
    layout->addWidget(txtName2,1,1);

    QPushButton *button =new QPushButton("OK");
    layout->addWidget(button,2,0,1,2);

    window->setLayout(layout);
    window->show();
    return app.exec();
}

效果

Grid Layout

C plus plus Qt 10 - Splitters - YouTube

C plus plus Qt 11 - QDir - YouTube

#include <QDir>

【Demo1】

//检测是否存在
QDir mDir("/Users/zdy/aaa");
qDebug()<<mDir.exists();

【Demo2】

//遍历驱动器
QDir mDir;
foreach(QFileInfo mItem,mDir.drives()){
    qDebug()<<mItem.absoluteFilePath();
}

【Demo3】

//创建文件
QDir mDir;
QString mPath="/Users/zdy/Desktop/ttt";
if(!mDir.exists(mPath)){
    qDebug()<<"created";
    mDir.mkpath(mPath);
}else{
    qDebug()<<"already exists";
}

【Demo4】

// 遍历目录,并区分 目录 文件
QDir mDir("/Users/zdy/Desktop");
foreach (QFileInfo mItem, mDir.entryInfoList()) {
    if(mItem.isDir()){
        qDebug()<<"Dir  "+mItem.absoluteFilePath();
    }else if(mItem.isFile()){
        qDebug()<<"File "+mItem.absoluteFilePath();
    }
}

C plus plus Qt 12 - QFile - YouTube

【文件读写】

#include <QFile>
#include <QTextStream>

void Write(QString Filename){
    QFile mFile(Filename);
    if(!mFile.open(QFile::WriteOnly|QFile::Text)){
        qDebug()<<"could not open file for writing";
        return;
    }
    QTextStream out(&mFile);
    out<<"Hello world";
    mFile.flush();
    mFile.close();
}

void Read(QString Filename){
    QFile mFile(Filename);
    if(!mFile.open(QFile::ReadOnly|QFile::Text)){
        qDebug()<<"could not open file for reading";
        return;
    }
    QTextStream in(&mFile);
    QString mText =in.readAll();
    qDebug()<<mText;
    mFile.close();
}

QString mFilename="/Users/zdy/Desktop/m.txt";
Write(mFilename);
Read(mFilename);

C plus plus Qt 13 - Resource Files - YouTube

C plus plus Qt 14 - QLabel and QT Designer - YouTube

text 支持 html

<h1>Hello</h1><h2 style="color:red;background:#000">world</h2>

C plus plus Qt 15 - QPushButton - YouTube

【Demo1】

void Dialog::on_pushButton_clicked()
{
    qDebug()<<"clicked";
}

void Dialog::on_pushButton_clicked(bool checked)
{
    QString boolText = checked ? "true" : "false";
    qDebug()<<"clicked "+ boolText;
}

void Dialog::on_pushButton_toggled(bool checked)
{
    QString boolText = checked ? "true" : "false";
    qDebug()<<"toggled "+boolText;
}

void Dialog::on_pushButton_pressed()
{
    qDebug()<<"pressed";
}

void Dialog::on_pushButton_released()
{
    qDebug()<<"released";
}

点击一次按钮之后,打印如下:

pressed
"toggled true"
released
"clicked true"
clicked

C plus plus Qt 17 - QCheckBox - YouTube

if(ui->checkBox->isChecked()){
     qDebug()<<"checked";
}else{
    qDebug()<<"not checked";
}

C plus plus Qt 18 - QRadioButton - YouTube

//成员变量
QButtonGroup *btnGroup;
//构造函数中分组
btnGroup=new QButtonGroup(this);
btnGroup->addButton(ui->radioButton);
btnGroup->addButton(ui->radioButton_2);
btnGroup->addButton(ui->radioButton_3);
//具体取值
switch(btnGroup->checkedId())
{
case 0:
    qDebug() << "cats";
    break;
case 1:
    qDebug() << "dogs";
    break;
case 2:
    qDebug() << "rows";
    break;
}

C plus plus Qt 19 - QComboBox - YouTube

for(int i=0; i<10; i++){
    ui->comboBox->addItem(QString::number(i)+" item");
}

qDebug() << ui->comboBox->currentText();
qDebug() << ui->comboBox->currentIndex();

C plus plus Qt 20 - QListWidget - YouTube

for(int i=0; i<10; i++){
    ui->listWidget->addItem(QString::number(i)+" item here");
}

QListWidgetItem *item = ui->listWidget->currentItem();
qDebug() << item->text();
item->setText("current");
item->setTextColor(Qt::red);
item->setBackgroundColor(Qt::black);

C plus plus Qt 21 - QTreeWidget - YouTube

ui->treeWidget->setColumnCount(2);
ui->treeWidget->setHeaderLabels(QStringList()<<"one"<<"two");
AddRoot("1 Hello","world");
AddRoot("2 Hello","world");
AddRoot("3 sHello","world");

void Dialog::AddRoot(QString name,QString description){
    QTreeWidgetItem *item=new QTreeWidgetItem(ui->treeWidget);
    item->setText(0,name);
    item->setText(1,description);
    ui->treeWidget->addTopLevelItem(item);
    AddChild(item,"one","hello");
    AddChild(item,"two","world");
}
void Dialog::AddChild(QTreeWidgetItem *parent,QString name,QString description){
    QTreeWidgetItem *item=new QTreeWidgetItem(parent);
    item->setText(0,name);
    item->setText(1,description);
    parent->addChild(item);
}

ui->treeWidget->currentItem()->setBackgroundColor(0,Qt::red);
ui->treeWidget->currentItem()->setBackgroundColor(1,Qt::blue);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 15.Qt 和 C++(Qt and C++) 本章的作者:jryannel ** 注意: **最新的构建时间:2...
    赵者也阅读 1,194评论 0 3
  • 走过一段青春,留下一段色彩,只为等待陌上花开。 总是走在路上,那么的不知疲倦,看岁月悄悄地带走一切,伸出手,努力想...
    箫木阅读 297评论 0 1
  • 2017年07月25日 荷实(摄影:玩荣强,2017年6月28日摄于襄阳市,选自爱拍征集:夏日时光) 湖映蓝天镜面...
    安意如angel阅读 348评论 2 1
  • 1. 如果一个app跳转到另一个app 设置app的key 在目标app设置调过来的白名单。 Item添加白名单...
    aofeilin阅读 416评论 0 0
  • 夏夜 沉闷而安详 月亮 是黑夜的眼睛 寂寞的流泪了 一滴一滴 凝成一把银色的寒犁 潜入一颗荒废的心 在种过梦想的那...
    碎碎片片阅读 126评论 0 0