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);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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